在调用 DataAdapter Fill() 方法后,判断新行是不是添加到 DataTable 的正确方法是啥?

Posted

技术标签:

【中文标题】在调用 DataAdapter Fill() 方法后,判断新行是不是添加到 DataTable 的正确方法是啥?【英文标题】:what's the proper way to tell if new rows were added to a DataTable after the DataAdapter's Fill() method is called?在调用 DataAdapter Fill() 方法后,判断新行是否添加到 DataTable 的正确方法是什么? 【发布时间】:2012-07-02 22:46:09 【问题描述】:

我一直在玩 DataTable 的 RowChanged 和 RowChanging 事件,还有 TableNewRow 事件,但无法让它工作。

本质上,我拥有的是一个事件处理程序,其中包含填充 DataTable 的代码,然后是另一个事件处理程序,其中包含重新填充相同 DataTable 的代码,并且应该通知用户在调用 Fill 方法之间添加了新行到表(假设是这种情况)。

我也一直在使用 DataRow 的索引器并指定 DataRowVersion,但无法使其正常工作。

我一直在使用 DataAdapter 的 FillLoadOption 方法,但仍然无法让它工作。

谁能给我一个提示?

【问题讨论】:

我不认为只计算行数会不好。如果我错了,请纠正我。 你是对的。那会奏效。但是我仍然需要一种方法来向用户显示更改了哪些行。我想我可以遍历所有内容并手动比较行,但这似乎太笨拙了。 啊,你也想要改变。这就说得通了。 msdn.microsoft.com/en-us/library/k2552649.aspx 【参考方案1】:

您可以使用DataTable.GetChanges() 方法了解上次针对表发出的AcceptChanges 中添加、修改或删除了哪些行

例如:

DataTable added = dt.GetChanges(DataRowState.Added);
int countAdded = added.Rows.Count;

DataRowState 枚举让您可以选择其他类型的修改行

【讨论】:

顺便说一句,您知道如何在不添加重复行的情况下重新填充数据表,而只需覆盖已经存在的行吗? 您需要探索DataTable.ImportRow、DataTable.LoadDataRow和DataTable.Merge这些方法

以上是关于在调用 DataAdapter Fill() 方法后,判断新行是不是添加到 DataTable 的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

DataAdapter.Fill(数据集)

DataAdapter.Fill()分页

如何提高 dataadapter.fill 的性能?

向 dataAdapter.fill() 添加参数

使用 Dataadapter 更新时发生 DBConcurrency 异常

DataAdapter.Fill 给出错误“在 sys.servers 中找不到服务器‘系统’。” [关闭]