我在我的项目中有一个UltraGrid
,并且我在表单上有一个更新函数来更新数据匹配的数据库中的数据。
网格中的数据被存储为DataTable
。如果从UltraGrid
中删除了一行现有数据,我希望能够将DataTable
中该行的RowState
设置为'RowState '。删除, so that in the Update function I can check the
RowState ',如果是已删除的行,则删除,否则,更新数据
我该怎么做呢?到目前为止,我有下面的代码,但是返回的行数是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
解决了
-
在类的顶部声明一个
DataTable
-
在
BeforeRowsUpdate
方法中,在DataTable
中插入新行,即被删除行的值 -
可选,包括一个确认框,以确保他们希望删除行。如果他们取消删除,则从
DataTable
中删除该行。 -
这个
DataTable
可以用来删除UPDATE
查询中的行,而网格DataSource
可以处理UPSERTS
网格将调用标记行为已删除(设置RowState),如果您正在使用TableAdapter,那么您可以简单地在表适配器上调用Update,将DataTable传递给TableAdapter,它将在数据库中进行更新。例如:
ultraGrid1.UpdateData()
Me.dbRowsTableAdapter.Update(Me.testDataSet)
如果你必须手动处理更新,你想要得到删除的行,你可以在DataTable上调用Select在DataViewRowState中传递。删除第三个参数