2016-10-07 45 views
0

我在我的項目中有一個UltraGrid,並且我在表單上有一個更新函數來更新數據庫中匹配數據的數據。將DataTable行的RowState設置爲刪除

網格中的數據被存儲爲DataTable。如果從UltraGrid中刪除了一行現有數據,我希望能夠將DataTable中該行的RowState設置爲「RowState.Deleted , 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 
+0

你不需要做任何的是,僅僅刪除行('的DataRow。刪除()')並設置行狀態。如果你使用DataAdapter,*** ***會根據行狀態爲每一行採取適當的操作:'Dim rows = myDA.Update(dsProducts.Tables(0))' – Plutonix

+0

@Plutonix我沒有以編程方式設置要刪除的行,這是由'UltraGrid'自動處理的。通過使用'DataAdapter',你的意思是實際的更新/刪除查詢本身嗎?而不是'OleDbCommand'? – David

+0

這[通過datagridview搜索值](http://stackoverflow.com/a/33702351/1070452)顯示瞭如何配置和使用DataAdapter(我想你的情況下是''OleDBDataAdapter'')。他們將「保留」更新,刪除等命令,並通過更新方法發出它們。 – Plutonix

回答

0

解決了它。

  • 在類

  • BeforeRowsUpdate方法的頂部聲明一個DataTable,插入一個新行,在DataTable,它們是被刪除的行的值。

  • (可選)包含一個確認框,以確保他們希望刪除該行。如果他們取消刪除,請從DataTable中刪除該行。

  • DataTable然後可以用於在UPDATE查詢刪除行,而電網DataSource可以處理UPSERTS

0

該網格將呼叫標記的行爲已刪除(設置RowState的),如果你正在使用的TableAdapter,那麼你可以簡單地調用傳遞的DataTable的TableAdapter的表適配器上的更新,它會做更新在數據庫中。例如:

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

如果您必須手動處理更新,你想獲得刪除的行,你可以在DataViewRowState .Deleted DataTable中傳遞的第三個參數調用Select

+0

嗨,你有沒有任何這樣做的例子,這兩種方法? – David

+0

在此論壇主題中有一個在TableAdapter上使用更新的示例:http://www.infragistics.com/community/forums/t/57161.aspx – alhalama

相關問題