为什么我的DataGridView没有更新底层DataTable的更改

时间:2010-10-03 04:27:06

标签: c# .net

这是我的代码:

    private void button1_Click(object sender, EventArgs e)
    {
        DataTable table = new DataTable();
        using (SqlCeDataAdapter sqlCeDataAdapter = new SqlCeDataAdapter("SELECT * FROM test", sqlCeConnection))
        {
            sqlCeDataAdapter.Fill(table);
        }
        dataGridView1.DataSource = table;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        MessageBox.Show(((DataTable)dataGridView1.DataSource).Rows.Count.ToString());
    }

我要做的是更新基础数据库,但根据this教程,基础DataTable需要反映DataGridView每当我做出的更改编辑行。我正在做的只是运行应用程序,按button1,然后删除DataGridView中的某些行,然后按button2查看我获得了多少行。在这个应用程序中,我获得与删除行之前相同的行数,但如果我将dataGridView1的{​​{1}}替换为DataSource我自己填充(通过调用DataTable ,等等),每次删除行时,更改都会反映在DataTable.NewRow()上(删除其中一些后,基础DataTable包含的行数会减少。)

1 个答案:

答案 0 :(得分:3)

即使您将代码与您所指的文章进行比较,您的代码似乎也不完整。

在文章本身中,它是BindingSource,用于实现您尝试实现的功能。请参阅该文章中使用的以下代码。

//BindingSource to sync DataTable and DataGridView
BindingSource bSource = new BindingSource();

既然你似乎正在了解这一点,我不会给你一些确切的代码,而是指向大方向。

查看示例教程中如何使用上述对象。这应该可以帮助您模拟类似于您所寻找的行为。

此外,还有一个提示,一旦您将网格绑定到数据源后进行了一些更改,您必须将数据源转发给 update 本身。这也包含在教程的示例代码中。

希望这有帮助!我还建议您阅读与BindingSourceDataAdapter相关的MSDN,因为您需要将两者结合使用,以使您的功能按照您的意愿运行。