您可以尝试在DataTable上使用Merge方法.我将尝试创建一个简单的演示应用程序并在此处发布,但这个想法很简单.如果要更新网格,请将结果查询到新的DataTable,然后将旧表与新表合并.只要两个表都有主键(如果它们不从DB返回,您可以将它们创建为内存),那么它应该跟踪更改并无缝更新DataGridView.它还具有不会丢失用户在网格上的位置的优点.
好的,这是一个样本.我创建了一个带有两个按钮和一个dataGridView的表单.在按钮1上单击,我用一些数据填充主表,并将网格绑定到它.然后,在第二次单击时,我创建具有相同模式的另一个表.向其添加数据(一些具有相同的主键,一些具有新的主键).然后,他们将它们合并回原始表.它按预期更新网格.
public partial class Form1 : Form { private DataTable mainTable; public Form1() { InitializeComponent(); this.mainTable = this.CreateTestTable(); } private void button1_Click(object sender, EventArgs e) { for (int i = 1; i <= 10; i++) { this.mainTable.Rows.Add(String.Format("Person{0}", i), i * i); } this.dataGridView1.DataSource = this.mainTable; } private void button2_Click(object sender, EventArgs e) { DataTable newTable = this.CreateTestTable(); for (int i = 1; i <= 15; i++) { newTable.Rows.Add(String.Format("Person{0}", i), i + i); } this.mainTable.Merge(newTable); } private DataTable CreateTestTable() { var result = new DataTable(); result.Columns.Add("Name"); result.Columns.Add("Age", typeof(int)); result.PrimaryKey = new DataColumn[] { result.Columns["Name"] }; return result; } }