DataTable Cancel Row Удалить - PullRequest
       7

DataTable Cancel Row Удалить

2 голосов
/ 08 октября 2009

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

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

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

Ответы [ 4 ]

4 голосов
/ 25 мая 2011

Хотя этой теме уже 2 года, я добавляю ответ на тот случай, если кто-то наткнется.

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

Я сделал следующее:

a) В DataTable добавьте обработчик «RowDeleted»:

dt.RowDeleted += new DataRowChangeEventHandler(dt_RowDeleted);

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

void dt_RowDeleted(object sender, DataRowChangeEventArgs e)
{
     if ( ... Add your condition here ... ) 
         e.Row.RejectChanges();
}
1 голос
/ 01 мая 2012

Гораздо проще, чем приведенные выше решения.

В событии 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;
1 голос
/ 08 октября 2009

Рубенс

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

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

Я изменил свой DataTable, чтобы запретить удаление

dataTable.DefualtView.AllowDelete = false

и в обработчике нажатия кнопки удаления я написал следующий код:

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

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

Еще раз спасибо за вашу помощь.

Raghu

0 голосов
/ 08 октября 2009

Моей первой мыслью было предложить "e.Cancel = true;" но это свойство недоступно.

Погуглив немного, я наткнулся Как отменить удаление строки в наборе данных ; пожалуйста, посмотрите.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...