DataGridView
コントロールをバインディングソースにバインドすると、アプリケーションで次のエラーが発生します。
SetCurrentCellAddressCore関数へのリエントラント呼び出しが発生するため、操作は無効です
バインディングソースはデータテーブルによって異なります。そして、DataGridViewからレコードをフィルタリングしています。そして、DataGridViewをフィルタリングしているdataGridView1_CellValueChanged()
イベントを使用しました。しかし、現在のセルからデータを削除すると、このエラーが発生します。
この問題を解決するにはどうすればよいですか?
例外は、無限ループの発生を防ぐためにDataGridView
によって発生します。この原因は通常、次のいずれかです。
DataGridView
がまだ使用しているときにアクティブセルが変更されるその他の操作CellValueChanged
イベントのハンドラーを調べて、ハンドラー内で上記のいずれも実行していないことを確認してください。
これはおそらく、保存後にDataGridViewを更新しようとしたことが原因です。メソッドを呼び出すだけでなく、メソッドを呼び出すことをお勧めします。
BeginInvoke(new MethodInvoker(PopulateControl ));
コードに空のDataGridView.CellValidatedサブルーチンがあるため、この例外が発生したことがわかりました。その空のサブを削除すると、エラーはなくなりました。
FalseをデータグリッドビューのMultiSelectプロパティに設定します。
myDataGridView.MultiSelect=false;
これは非常によく似ています(同じことをすることができますが、セルを編集する必要はありません)。コントロールが存在するのと同じスレッド(イベント、バックグラウンドワーカー、別のスレッド...)の外部のdatagridviewに対して行われた処理はすべて呼び出す必要があります。ここで解決策を読んでください。
https://stackoverflow.com/questions/44456465/datagridview-invalidoperationexception-reentrant-call-to-setcurrentcelladdressco?noredirect=1#comment75919793_44456465
これは、DataGridview
がBeginEdit
にあるときにデータソースを操作することで発生する可能性があります。
別の解決策は、データソースを操作しながらSuspendBinding
のCurrencyManager
をDataGridView
することです。
CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGridView1.DataSource];
currencyManager.SuspendBinding();
// Manipulate datasource
currencyManager.ResumeBinding();