使用DataView使DataGridView保持最新

时间:2013-11-18 18:48:58

标签: c# winforms datagridview dataview

我试图了解绑定在winforms中的工作原理。我有以下示例代码,其中我只想让DataGridViewDataView保持同步,而不必每次都重置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的数据源,并且在列表执行时自动更改了更改。我正试图进行同样的互动。

1 个答案:

答案 0 :(得分:2)

即使您绑定到DataTable,也会有默认视图DataView。所以,真的,你总是得到DataView。数据视图允许您对数据进行排序和其他技巧,数据在数据源中保持相同的顺序。真的,这就是它的全部。您可以准备多个数据视图,通过切换它们,您可以更改数据在网格中的显示方式。