Lorsque je lie un contrôle DataGridView
à une source de liaison, l'erreur suivante s'affiche dans mon application:
L'opération n'est pas valide car elle entraîne un appel réentrant à la fonction SetCurrentCellAddressCore.
La source de liaison dépend de la table de données. Et je filtre les enregistrements de DataGridView. Et j'ai utilisé l'événement dataGridView1_CellValueChanged()
pour filtrer le DataGridView. Mais lorsque je supprimais les données de la cellule en cours, cette erreur se produisait.
Comment puis-je résoudre ce problème?
L’exception est déclenchée par la variable DataGridView
afin d’empêcher l’apparition d’une boucle infinie. La cause en est généralement l'une des suivantes:
DataGridView
l'utilise encoreExaminez votre gestionnaire pour l'événement CellValueChanged
et assurez-vous que vous ne faites rien de ce qui est décrit ci-dessus dans le gestionnaire.
Cela est probablement dû à votre tentative d'actualisation d'un DataGridView après une sauvegarde. Je vous suggère d'appeler la méthode plutôt que de simplement l'appeler.
BeginInvoke(new MethodInvoker(PopulateControl ));
J'ai trouvé cette exception parce que j'avais un sous-fichier DataGridView.CellValidated vide dans mon code. Une fois que j'ai supprimé ce sous vide, l'erreur est partie.
Ceci est très similaire (et pourrait être la même chose mais sans éditer une cellule). Tout ce qui est fait à un datagridview en dehors du même thread que celui où le contrôle existe (événement, ouvrier d'arrière-plan, autre thread ...) doit être appelé. Lisez la solution ici.
https://stackoverflow.com/questions/44456465/datagridview-invalidoperationexception-reentrant-call-to-setcurrentcelladdressco?noredirect=1#comment75919793_44456465
Définissez False sur MultiSelect Propriété de votre datagridview.
myDataGridView.MultiSelect=false;
Cela peut être dû à la manipulation de la source de données alors que DataGridview
est dans BeginEdit
.
Une autre solution consiste à SuspendBinding
sur la CurrencyManager
de la DataGridView
lors de la manipulation de la source de données.
CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGridView1.DataSource];
currencyManager.SuspendBinding();
// Manipulate datasource
currencyManager.ResumeBinding();