我试图了解绑定在winforms中的工作原理。我有以下示例代码,其中我只想让DataGridView
与DataView
保持同步,而不必每次都重置DataGridView
的数据源视图更改:
DataView myView = new DataView();
DataTable myTable = new DataTable();
public Form1()
{
InitializeComponent();
myTable.Columns.Add("MyColumn");
//Just make some test data.
for (int i = 0; i < 3; i++)
{
DataRow myRow = myTable.NewRow();
myRow["MyColumn"] = "TEST";
myTable.Rows.Add(myRow);
}
//Make a row that is different to filter on.
DataRow myUnRow = myTable.NewRow();
myUnRow["MyColumn"] = "TEST2";
myTable.Rows.Add(myUnRow);
myView = myTable.AsDataView();
bindingSource1.DataSource = myView;
dataGridView1.DataSource = bindingSource1.DataSource;
}
private void button1_Click(object sender, EventArgs e)
{
//Refilter the view.
myView = (from dataRow in myTable.AsEnumerable()
where (string)dataRow["MyColumn"] == "TEST2" select dataRow).AsDataView();
//When this code finishes datagridview1 still shows all the original rows. Should just show the one row with "TEST2"?
}
我之前使用了BindingList
并将其绑定到comboBox
的数据源,并且在列表执行时自动更改了更改。我正试图进行同样的互动。
答案 0 :(得分:2)
即使您绑定到DataTable,也会有默认视图DataView
。所以,真的,你总是得到DataView
。数据视图允许您对数据进行排序和其他技巧,数据在数据源中保持相同的顺序。真的,这就是它的全部。您可以准备多个数据视图,通过切换它们,您可以更改数据在网格中的显示方式。