0

データソースとグリッド コントロールとして BindingList があり、ユーザーがグリッド内の行を削除した場合、確認 (メッセージ ボックスなど) を取得する必要があります。

私が使用しているグリッド コントロール (そして、それらのほとんどを推測します)、RemoveAt(int index)、void の戻り値を持つ Collection のメソッドを呼び出します。bindingList から継承する場合でも、メソッドをオーバーライドするか、新しいそれ(およびその他)の実装、グリッドはユーザーが操作のキャンセルを選択したことを知る方法がないため、役に立ちません...

データバインディングとストックバインディングリスト、グリッドコントロールのみを使用して問題を回避する方法はありますか?

私が行った回避策は次のとおりです。BindingList フォームを継承し、ICancellableRemoving を実装します (単一の "bool RemoveItem(object item)" を含みます)。 b. グリッドから継承し、remove メソッド (または同様のもの) をオーバーライドし、データソースが ICancellableRemoving を実装しているかどうかを確認し、実装している場合はメソッドを呼び出します。 、結果を調べて、それに応じて操作をキャンセル/続行します。

PS インターフェイスを実装したのは、Bool の戻り値を持つ BindingList の唯一の「Remove*」メソッドが Collection の Remove(T Item) であり、それが一般的であるためです...グリッドはそうではありません ;)

前もってありがとう、エリック。

4

2 に答える 2

1

OnRowDeleting()にアタッチ

于 2009-11-11T22:10:39.957 に答える
0

これはWinFormsですか?その場合、WinForms の DataGridView コントロールには、呼び出すことができる 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;
}
于 2009-11-11T22:21:02.260 に答える