このようなものを使用すると何が得られますか?
DataGridView dgvDocuments = new DataGridView();
BindingSource bindingSource = new BindingSource();
DataTable dtDocuments;
dtDocuments = MsSQL.GetDocuments(dtpOd.Value, dtpDo.Value);
bindingSource.DataSource = dtDocuments;
dgvDocuments.DataSource = bindingSource;
これの代わりに:
DataGridView dgvDocuments = new DataGridView();
DataTable dtDocuments;
dtDocuments = MsSQL.GetDocuments(dtpOd.Value, dtpDo.Value);
dgvDocuments.DataSource = dtDocuments;
BindingSource
には多くの利点があり、そのうちのいくつかを下回ります
1)bindingsourceを使用してデータを任意のコントロールにバインドすると、両側で有効になります。制御するデータソース効果に加えられた変更、および制御効果データソースへの変更。コントロールから値を取得して、データソースに再度割り当てる必要はありません
2)filter
をdatasource
でbindingsource
に適用できます
3)many controls
にバインドされた1つのdatasource
を操作できます。たとえば、テーブルFruits
があり、このtable
を2 DataGridView
にバインドして、Aplles
とPeaches
を別々に表示します。 bindingsource
Filter
プロパティを使用すると、Apples
とPeaches
を別々に表示できます。
4)bindingsourceを使用して、検索、並べ替え、編集、フィルタリングを行うことができます
基本リストではbindingsourceの利点を確認できませんが、bindingsourceの有用性を確認できるのは基本リストだけではありません。
あなたはより多くの情報を得ることができます ここ
利点の1つは、DataGridViewの値を手動で操作すると、変更が基になるデータに反映されることです。 (編集:明らかに、これは通常のDataSourceバインディングでも機能します。)
もう1つの利点は、余分な空のフィールドをクリックして値を編集することにより、基になるデータにエントリを追加できることです(少なくとも、それがList
の場合)。これにより、追加のコードなしで新しいアイテムが追加されます。
この 詳細なデータバインディングチュートリアル 一般的なデータバインディングの機能にさらに光を当てるのに役立つかもしれません
編集:
もう1つの違いは、リストへのアイテムの追加など、基になるデータの操作は、たとえばDataGridView
で機能するDataSource
プロパティを再度割り当てても、ComboBox
に反映されないことです。ただし、BindingSource
の新しいインスタンスを再割り当てするとうまくいきます。
したがって、人のリストがある場合:
List<pers> list = new List<pers>();
BindingSource bs = new BindingSource();
bs.DataSource = perlist;
dataGridView1.DataSource = bs;
後でコードのリストに新しいアイテムを追加したい場合は、BindingSource
の新しいインスタンスを作成し、それをDataGridView.DataSource
に再割り当てします。
list.Add(new pers());
bs = new BindingSource();
bs.DataSource = perlist;
dataGridView1.DataSource = bs;
新しいアイテムが表示されます