我有一個窗體,其上有一個DataGrid控件(不是DataGridView)。DataTable取消行刪除
DataGrid控件綁定到DataTable。每當用戶按下網格上某行上的刪除按鈕時,我想檢查一個條件並在條件爲false時停止刪除該行。
我訂閱了DataTable的RowDeleting事件,但我找不到一種方法來取消用戶執行的刪除操作。我怎樣才能做到這一點?
我有一個窗體,其上有一個DataGrid控件(不是DataGridView)。DataTable取消行刪除
DataGrid控件綁定到DataTable。每當用戶按下網格上某行上的刪除按鈕時,我想檢查一個條件並在條件爲false時停止刪除該行。
我訂閱了DataTable的RowDeleting事件,但我找不到一種方法來取消用戶執行的刪除操作。我怎樣才能做到這一點?
魯本斯
感謝您的答覆。我已經查過那個線程,但無法找到有用的解決方案。
我只是稍微修改了我的項目,我現在有一個刪除按鈕,而不是直接從數據網格本身刪除。
我改變了我的DataTable不允許任何刪除
dataTable.DefualtView.AllowDelete = false
和刪除按鈕單擊處理程序,我寫了下面的代碼:
(datagridStandardRates.DataSource as DataTable).Rows[datagridStandardRates.CurrentRowIndex].Delete();
這讓我過去,當我想完全控制刪除一行。
再次感謝您的幫助。
Raghu
我的第一個想法是建議「e.Cancel = true;」但該屬性不可用。
用谷歌搜索了一下我碰到了How do I cancel a row delete in a DataSet;請看一下。
HTH
雖然這個線程爲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();
}
只是爲了給Georg的答案添加一個快速註釋。按照他的要求進行操作,並且不要嘗試拒絕_deleting_事件中的刪除操作。因爲,這不起作用:-D – phareim 2014-12-16 10:28:42
比上述解決方案要容易得多。
在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;
這也會阻止取消編輯的單元格值。這可能會讓你煩惱。如果你想撤銷當前單元格的變化! – 2017-08-22 19:43:17
哇,這是一個古老的答案;我剛剛更新了鏈接 – 2015-05-28 18:06:12