.NET DataBinding, подтверждение перед удалением элементов из списка - PullRequest
0 голосов
/ 12 ноября 2009

У меня есть BindingList в качестве источника данных и элемента управления сеткой, если пользователь удаляет строку в сетке, я хочу, чтобы он получил подтверждение (например, окно сообщения),

элемент управления сеткой, который я использую (и я предполагаю, что большинство из них), вызовите RemoveAt (int index), метод Collection который имеет возвращаемое значение void, даже если я унаследую от bindingList, переопределю метод или предоставлю новую реализацию для него (и других), это не поможет, потому что у сетки нет способа узнать, что пользователь решил отменить операция ...

Есть ли способ обойти проблему, используя только привязку данных и список привязки запаса, контроль сетки?

Обходной путь, который я сделал: а. наследовать форму BindingList, реализовать ICancellableRemoving (которая содержит один «bool RemoveItem (объектный элемент)». б. наследовать от сетки, переопределить метод удаления (или аналогичный), проверить, реализует ли источник данных ICancellableRemoving, если это так, вызвать метод, проверить результат и соответственно отменить / продолжить операцию.

P.S Я реализовал интерфейс, потому что единственный метод «Remove *» в BindingList, который имеет возвращаемое значение bool, - это Remove (T Item) из Collection, и он является общим ... сетка не является;)

Спасибо заранее, Эрик.

Ответы [ 2 ]

1 голос
/ 12 ноября 2009

прикрепить к OnRowDeleting ()

0 голосов
/ 12 ноября 2009

Это WinForms? Если это так, элемент управления DataGridView в WinForms имеет событие UserDeletingRow (), которое можно вызвать. Например:

// wire up the event
myGrid.UserDeletingRow += new DataGridViewRowCancelEventHandler(myGrid_UserDeletingRow);

// event handler
private void myGrid_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
    DialogResult result = MessageBox.Show("Are you sure you wish to delete this row?", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

    if (result == DialogResult.No)
        e.Cancel = true;
}
...