BindingSource - 使用 BindingSource 有什么优势

BindingSource - what are the advantages of using BindingSource

是什么让我使用这样的东西:

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;

其中一个优点是,如果您手动操作 DataGridView 中的值,则更改将反映在基础数据中。 (编辑:显然这也适用于普通的数据源绑定。)

另一个优点是您可以通过单击额外的空白字段并编辑值来向基础数据添加条目(至少如果它是 List)。这将添加一个新项目,无需您编写任何额外代码。

Detailed Data Binding Tutorial 可能有助于更清楚地了解数据绑定的一般功能

编辑:

另一个区别是,对基础数据的操作,例如将项目添加到列表中不会反映在 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;

将显示新项目

BindingSource有很多好处,以下是其中的一些

1) 当你使用绑定源将数据绑定到任何控件时,它会在双方生效。对数据源所做的任何更改都会影响控件,以及对控件会影响数据源的任何更改。您不需要从控件中获取值并再次分配给数据源

2) 您可以使用 bindingsource

filter 应用于 datasource

3) 您可以将一个 datasource 绑定到 many controls。例如,您有 table Fruits,然后将此 table 绑定到 2 DataGridView 以分别显示 ApllesPeaches。使用 bindingsource Filter 属性 您可以分别显示 ApplesPeaches

4) 您可以使用 bindingsource

进行搜索、排序、编辑、过滤

您无法在基本列表中看到 bindingsource 的好处,但除了基本列表之外,您还会看到 bindingsource 的用处。

您可以获得更多信息Here