2009-10-08 93 views
2

我有一個窗體,其上有一個DataGrid控件(不是DataGridView)。DataTable取消行刪除

DataGrid控件綁定到DataTable。每當用戶按下網格上某行上的刪除按鈕時,我想檢查一個條件並在條件爲false時停止刪除該行。

我訂閱了DataTable的RowDeleting事件,但我找不到一種方法來取消用戶執行的刪除操作。我怎樣才能做到這一點?

回答

1

魯本斯

感謝您的答覆。我已經查過那個線程,但無法找到有用的解決方案。

我只是稍微修改了我的項目,我現在有一個刪除按鈕,而不是直接從數據網格本身刪除。

我改變了我的DataTable不允許任何刪除

dataTable.DefualtView.AllowDelete = false 

和刪除按鈕單擊處理程序,我寫了下面的代碼:

(datagridStandardRates.DataSource as DataTable).Rows[datagridStandardRates.CurrentRowIndex].Delete(); 

這讓我過去,當我想完全控制刪除一行。

再次感謝您的幫助。

Raghu

0

我的第一個想法是建議「e.Cancel = true;」但該屬性不可用。

用谷歌搜索了一下我碰到了How do I cancel a row delete in a DataSet;請看一下。

HTH

+0

哇,這是一個古老的答案;我剛剛更新了鏈接 – 2015-05-28 18:06:12

4

雖然這個線程爲2歲,我補充一點,以防有人絆倒對面的答案。

對於DataTable中的每一行,都有方法「RejectChanges()」,您可以使用它來撤消刪除。

我做了如下:

一)到DataTable,添加一個 「RowDeleted」 處理程序:

dt.RowDeleted += new DataRowChangeEventHandler(dt_RowDeleted); 

b)在處理程序,調用functon 「RejectChanges()」,如下所示:

void dt_RowDeleted(object sender, DataRowChangeEventArgs e) 
{ 
    if (... Add your condition here ...) 
     e.Row.RejectChanges(); 
} 
+0

只是爲了給Georg的答案添加一個快速註釋。按照他的要求進行操作,並且不要嘗試拒絕_deleting_事件中的刪除操作。因爲,這不起作用:-D – phareim 2014-12-16 10:28:42

1

比上述解決方案要容易得多。

在UserDeletingRow事件中,只需調用e.Cancel = true;

DialogResult dlgRes = MessageBox.Show("Are you sure that you want to delete this Factor?", "DELETE ITEM?", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); 
if (dlgRes == DialogResult.Yes) 
{ 
    //WBSDA.Delete(dgvR.Cells["WBSID"].Value.ToInt()); 
    tslMessage.Text = "Item Deleted"; 
} 
else 
    e.Cancel = true; 
+0

這也會阻止取消編輯的單元格值。這可能會讓你煩惱。如果你想撤銷當前單元格的變化! – 2017-08-22 19:43:17