这是我的代码:
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
包含的行数会减少。)
答案 0 :(得分:3)
即使您将代码与您所指的文章进行比较,您的代码似乎也不完整。
在文章本身中,它是BindingSource,用于实现您尝试实现的功能。请参阅该文章中使用的以下代码。
//BindingSource to sync DataTable and DataGridView
BindingSource bSource = new BindingSource();
既然你似乎正在了解这一点,我不会给你一些确切的代码,而是指向大方向。
查看示例教程中如何使用上述对象。这应该可以帮助您模拟类似于您所寻找的行为。
此外,还有一个提示,一旦您将网格绑定到数据源后进行了一些更改,您必须将数据源转发给 update 本身。这也包含在教程的示例代码中。
希望这有帮助!我还建议您阅读与BindingSource和DataAdapter相关的MSDN,因为您需要将两者结合使用,以使您的功能按照您的意愿运行。