2009-10-08 4 views
2

У меня есть форма окна, на которой есть элемент управления DataGrid (Not DataGridView).DataTable Отмена строки Удалить

Элемент управления DataGrid привязан к DataTable. Каждый раз, когда пользователь нажимает кнопку удаления на одной из строк в сетке, я хочу проверить условие и прекратить удаление строки, если условие ложно.

Я подписался на событие RowDeleting в DataTable, но я не могу найти способ отмены операции удаления, выполняемой пользователем. Как я могу достичь этого?

ответ

1

Рубенс

Спасибо вам за ответ. Я уже просмотрел эту тему, но не нашел полезного решения.

Я просто немного изменил свой проект, теперь у меня есть кнопка удаления, а не удаление непосредственно из самого файла datagrid.

Я изменил мою 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; взгляни, пожалуйста.

НТН

+0

Вау, это старый ответ; Я только что обновил ссылку –

4

Хотя эта нить 2-х лет, я добавить ответ только в случае, если кто-то натыкается.

Для каждой строки в DataTable существует метод «RejectChanges()», который вы можете использовать для отмены удаления.

я сделал следующим образом:

а) в DataTable, добавьте "RowDeleted" Handler:

dt.RowDeleted += new DataRowChangeEventHandler(dt_RowDeleted); 

б) В обработчик, вызовите functon "RejectChanges()" следующим образом:

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

, чтобы добавить краткую заметку к ответу Георга. Сделайте, как он sugests, и не пытайтесь отклонить удаление из _deleting_-event. Потому что, ну, это не работает: -D – phareim

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

это также предотвращает отмену редактируемого значения ячейки. это может вас раздражать. если вы хотите отменить изменения в текущей ячейке !!! –

Смежные вопросы