是什么让我使用这样的东西:
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;
答案 0 :(得分:4)
其中一个优点是,如果您手动操作DataGridView中的值,则更改将反映在基础数据中。 (编辑:显然这也适用于普通的DataSource绑定。)
另一个优点是,您可以通过单击额外的空字段并编辑值来为基础数据添加条目(至少如果它是List
)。这将添加一个新项目,而无需任何其他代码供您编写。
此Detailed Data Binding Tutorial可能有助于更多地了解数据绑定的功能
修改强>
另一个区别是,对于基础数据的操作,例如向List添加项目,即使再次分配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;
并显示新项目
答案 1 :(得分:3)
BindingSource
有许多好处,低于其中一些
1)当您使用bindingsource将数据绑定到任何控件时,它将生效双方。对数据源效果进行的任何更改以及控制效果数据源的任何更改。您不需要从控制中获取值并再次分配给数据源
2)您可以filter
与datasource
bindingsource
3)您可以使用一个datasource
绑定到many controls
。例如,您有表Fruits
,并将此table
绑定到2 DataGridView
以单独显示Aplles
和Peaches
。使用bindingsource
Filter
属性,您可以单独显示Apples
和Peaches
。
4)您可以使用bindingsource进行搜索,排序,编辑,过滤
你无法在基本列表中看到bindingsource的好处,但是除了基本列表之外,你还会看到bindingsource是如何有用的。
您可以获得更多通知Here