【发布时间】:2017-02-16 17:00:05
【问题描述】:
我的项目中有一个UltraGrid,并且我在表单上有一个更新功能来更新数据匹配的数据库中的数据。
网格中的数据存储为DataTable。如果从UltraGrid 中删除了一行现有数据,我希望能够将DataTable 中该行的RowState 设置为'RowState.Deleted, so that in the Update function I can check theRowState',如果它是已删除的行,然后删除它,否则,更新数据。
我该怎么做呢?到目前为止,我有下面的代码,但是返回的行数是 1(或者,网格中的当前行数)而不是 2(我删除一行之前的行数)。
如何以及在代码中的何处将已删除行的RowState 设置为RowState.Deleted?有没有使用UltraGrid 的替代方法?
dsProducts.Tables.Add(commDt.Copy) -- commDt is the DataTable linked to the UltraGrid
tr = con.BeginTransaction(
For Each dr As DataRow In dsProducts.Tables(0).Rows
If dr.RowState = DataRowState.Deleted Then
Try
【问题讨论】:
-
您不需要执行任何操作,只需删除行 (
DataRow.Delete()) 并设置行状态。如果您使用 DataAdapter,it 将根据行状态对每一行采取适当的操作:Dim rows = myDA.Update(dsProducts.Tables(0)) -
@Plutonix 我没有以编程方式设置要删除的行,这是由
UltraGrid自动处理的。通过使用DataAdapter,您是指实际的更新/删除查询本身吗?而不是OleDbCommand? -
这个Searching values via a datagridview 展示了如何配置和使用DataAdapter(我猜你的情况是
OleDBDataAdapter)。他们将“坚持”更新、删除等命令并通过更新方法发出它们。 -
当您从
DataTable中删除一行时,您不能检查RowState属性,因为它不再存在。如果需要,您可以添加另一列Boolean类型,它可以确定在需要更新时是否应删除记录...或者另一种选择是您必须保留对DataRow的引用和删除后,您可以检查此对象的RowState... -
@Zaggler 在行上调用 Delete 和 Remove 之间存在区别,在这种情况下,行正在被删除而不是被删除,请参阅此了解更多详细信息:msdn.microsoft.com/en-us/library/03c7a3zb(v=vs.110).aspx
标签: vb.net datatable dataset infragistics rowstate