it-swarm.com.de

Warum gibt mein gebundenes DataGridView den Fehler "Vorgang ist ungültig, da die Funktion SetCurrentCellAddressCore erneut aufgerufen wird" aus?

Beim Binden eines DataGridView-Steuerelements an eine Bindungsquelle wird in meiner Anwendung der folgende Fehler angezeigt:

Der Vorgang ist nicht gültig, da er zu einem erneuten Aufruf der SetCurrentCellAddressCore-Funktion führt

Die Bindungsquelle hängt von der Datentabelle ab. Und ich filtere die Datensätze aus der DataGridView. Und ich habe das Ereignis dataGridView1_CellValueChanged() verwendet, bei dem ich DataGridView filtere. Beim Löschen der Daten aus der aktuellen Zelle tritt dieser Fehler auf.

Wie kann ich dieses Problem lösen?

22
priyanka

Die Ausnahme wird durch die Variable DataGridView ausgelöst, um das Auftreten einer Endlosschleife zu verhindern. Die Ursache dafür ist normalerweise eine der folgenden:

  • Ändern der aktiven Zelle, während an der gerade aktiven Zelle eine Operation ausgeführt wird
  • Bearbeitungsmodus starten, beenden oder abbrechen, während eine Zellenbearbeitung bereits ausgeführt wird
  • Jede andere Operation, die dazu führt, dass die aktive Zelle geändert wird, während DataGridView sie noch verwendet

Sehen Sie sich Ihren Handler für das Ereignis CellValueChanged an und stellen Sie sicher, dass Sie keine der oben genannten Aktionen im Handler ausführen.

29
Bradley Smith

Dies ist höchstwahrscheinlich darauf zurückzuführen, dass Sie versuchen, ein DataGridView nach einem Speichern zu aktualisieren. Ich empfehle Ihnen, die Methode aufzurufen, anstatt sie nur aufzurufen.

   BeginInvoke(new MethodInvoker(PopulateControl ));
26
CouncilScribe

Ich fand diese Ausnahme, weil ich ein leeres DataGridView.CellValidated-Sub in meinem Code hatte. Nachdem ich das leere U-Boot gelöscht hatte, ging der Fehler weg.

2
Mike Banach

Dies ist sehr ähnlich (und es könnte dasselbe sein, jedoch ohne eine Zelle zu bearbeiten). Alles, was an einem Datagridview außerhalb desselben Threads ausgeführt wird, in dem das Steuerelement vorhanden ist (Ereignis, Hintergrundarbeiter, anderer Thread ...), muss aufgerufen werden. Lesen Sie hier die Lösung.

https://stackoverflow.com/questions/44456465/datagridview-invalidoperationexception-reentrant-call-to-setcurrentcelladdressco?noredirect=1#comment75919793_44456465
0
DaBlue

Setzen Sie False auf MultiSelect-Eigenschaft Ihres Datagridview.

myDataGridView.MultiSelect=false;
0
Said Ait

Dies kann durch die Bearbeitung der Datenquelle verursacht werden, während sich DataGridviewin BeginEditbefindet.

Eine andere Lösung ist SuspendBindingauf dem CurrencyManagerdes DataGridViewname__, während die Datenquelle bearbeitet wird.

CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGridView1.DataSource];
currencyManager.SuspendBinding();
// Manipulate datasource
currencyManager.ResumeBinding();
0
clamchoda