2011-06-29 3 views
2

コレクションにバインドされたDataGridViewが頻繁に変更されます(コレクション自体ではなくオブジェクトのプロパティ)。セルの編集を開始すると、すぐにPropertyChangedイベントからの新しい値が置き換えられます。とにかく現在編集しているセルを更新するのを中断することはありますか?バインドされたDataGridViewで現在編集中のセルの更新を中断する方法はありますか?

答えて

2

BindingSourceを追加することで、あなたが望むものを達成できるはずです。

あなたはバインディングソースのRaiseListChangedEventsプロパティを変更することができたDataGridViewのCellBeginEditとCellEndEditイベント内
bindingSource1.DataSource = yourdatasource; 
dataGridView1.DataSource = bindingSource1; 

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    bindingSource1.RaiseListChangedEvents = true; 
} 

void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) 
{ 
    bindingSource1.RaiseListChangedEvents = false; 
} 

私は、ボタンで開始、その中の睡眠と背景の労働者でこれをテストしましたそれ以降のバインドされたリストの更新が含まれます。ボタンを押してからセルを編集し、タイマーの期限が切れた後も、セルの変更はまだ保持されています。

セルの編集を開始しなかったとき、リストのセルの変更が変更されました。


これは、特定のセルではなく、バインディングソース全体に対するものです。

+0

ありがとう!それが私の必要なものです。 – Peter17

1

フィールド外に出たとき(またはフィールドがコードから更新されたとき)にのみ常にバインドされたプロパティを更新したい場合は、DataBindingMode.OnPropertyChangedの代わりにDataBindingMode.OnValidatedを使用する必要があります。バインディングを作成する瞬間。

+0

DataGridViewには、DataBindingmodeプロパティがありません。このモードを変更するにはどうすればよいですか? – Peter17

+0

myDataGridView.DataBindings.Addには、型指定されたDataSourceUpdateMode型の引数があります。 –

関連する問題