在调用 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 的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章