将 DataTable 行的 RowState 设置为已删除

Set RowState of a DataTable row to deleted

我的项目中有一个UltraGrid,我在窗体上有一个update函数,用于更新数据匹配的数据库中的数据。

网格中的数据存储为 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

网格会调用将行标记为已删除(设置 RowState),如果您使用的是 TableAdapter,那么您只需在 table 适配器上调用 Update 将 DataTable 传递给 TableAdapter 即可数据库中的更新。例如:

ultraGrid1.UpdateData()
Me.dbRowsTableAdapter.Update(Me.testDataSet)

如果你必须手动处理更新并且你想得到删除的行,你可以调用Select on the DataTable passing in DataViewRowState.Deleted 为第三个参数。

解决了。

  • 在 class

  • 的顶部声明一个 DataTable
  • BeforeRowsUpdate方法中,在DataTable中插入一个新行,这是被删除行的值。

  • (可选)包括一个确认框以确保他们希望删除该行。如果他们取消删除,请从 DataTable 中删除该行。

  • DataTable 可用于删除 UPDATE 查询中的行,而网格 DataSource 可处理 UPSERTS