C# 更新行后高效刷新DataGridView

C# 更新行后高效刷新DataGridView,c#,datagridview,bindingsource,tableadapter,C#,Datagridview,Bindingsource,Tableadapter,我有一个DataGridView,它通过TableAdapter和BindingSource从SQLServer获取数据 我有一个方法可以检测行的更改,并向SQLServer发送更新查询。这很好用 之后,要更新DataGridView,我将执行以下操作: this.TableAdapter.Fill(this.DataSet.DataTable); 问题是,由于行数太多,这需要很长时间 我需要刷新它,因为表适配器是一个用左连接合并两个表的视图 有没有一种方法可以只更新一行,或者有其他更快的方法

我有一个DataGridView,它通过
TableAdapter
BindingSource
从SQLServer获取数据

我有一个方法可以检测行的更改,并向SQLServer发送更新查询。这很好用

之后,要更新DataGridView,我将执行以下操作:

this.TableAdapter.Fill(this.DataSet.DataTable);
问题是,由于行数太多,这需要很长时间

我需要刷新它,因为表适配器是一个用左连接合并两个表的视图


有没有一种方法可以只更新一行,或者有其他更快的方法来更新视图?

在Tableadapter上进行另一个查询(右键单击它,添加查询),该查询获取数据的参数。例如,如果您有一个现有查询:

SELECT * FROM a LEFT JOIN b ON a.id = b.id
(注意:在tableadapter a中编写查询,将整个数据库内容下载到客户机中通常是一个非常糟糕的主意)

您可以向tableadapter添加另一个查询:

SELECT * FROM a LEFT JOIN b ON a.id = b.id WHERE a.id = @aid
并将其命名为FillByAId/getdatabyid

然后,在客户端,在更新某些行ID 1234之后,您可以:

var newDt = yourTableAdapter.GetDataByAId(1234);

然后使用

将更改合并到现有的datatable中。使用DataAdapter时,datatable/DataSet与数据库之间存在链接。因此可以使用ds.AcceptChanges()(或dt.AcceptChanges())。以更新数据库中的数据。更改DataSet/DataTable后,DGV不会自动更新,因此技巧是将datasource设置为null并返回到DataTable:datagridview1.datasource=null;datagridview1.datasource=dt;我尝试了``DataGridView.datasource=null;DataGridView.datasource=this.datasource```但它不会刷新数据。是否写入DataTable,然后接受更改?请参阅: