Ich habe eine DataGridView
von einer Datenbank ausgefüllt.
Ich versuche, den Inhalt der Zeile zu erhalten, die im Ereignis RowEnter
ausgewählt wurde. Ich habe den Auswahlmodus des Gitters auf FullRowSelect
Ich habe Folgendes versucht:
%Vor%dies wirft den Fehler
Index lag außerhalb des Bereichs. Muss nicht negativ und kleiner als die Größe der Sammlung sein.
Jede Hilfe ist willkommen.
Ich habe das gerade in einer Beispieldatagridview-App ausprobiert und es funktioniert ganz gut, also muss etwas passieren, über das Sie uns noch nicht informiert haben.
Als erstes sollten Sie Ihre eine große Aussage in einzelne kleinere Aussagen aufteilen, damit Sie genau sehen können, wo der Fehler liegt.
Sie können den obigen Code zu Debugging-Zwecken wie folgt neu schreiben:
%Vor%Auch sollten Sie in der Lage sein, Folgendes zu tun, um zu erreichen, was Sie wollen:
%Vor%Das verwendet die SelectedRows-Sammlung, die ein wenig prägnanter ist, und ich würde die üblichere Art des Zugreifens auf ausgewählte Elemente aus der Datagridview sagen.
Schließlich möchten Sie wahrscheinlich den Wert umsehen, da der Wert möglicherweise nicht unbedingt ein int ist. Etwas wie:
%Vor%Wann wird das SelectionChanged-Ereignis ausgelöst?
Nun - wie Sie bereits erwähnt haben, wird Ihre Auswahl geändert, während das Ereignis beim Laden von Daten in das Raster ausgelöst wird. Dies scheint in meiner Testversion kein Problem zu verursachen, könnte aber Teil Ihres Problems sein.
Warum dies geschieht, sollte nicht mit dem Typ der Datenquelle, die Sie verwenden, in Verbindung stehen, sondern mit dem Anfügen des Ereignishandlers mit ausgewählter Änderung. Dies liegt daran, dass die Datenbindung ein Ereignis für die Änderung der Auswahl verursacht, das ausgelöst wird.
Wenn Sie einen Eventhandler für das DataBindingComplete-Ereignis hinzufügen und Ihre Eventhandler SelectionChanged oder RowEnter anhängen, sollte der Handler während der Datenbindung nicht aufgerufen werden.
%Vor%Beachten Sie, dass Sie die vom Designer generierte Ereignisanlage löschen und auf die vom Designer generierten Methoden verweisen müssen, damit dies funktioniert.
Was ich zu tun versuchte, funktionierte gut, aber die Bindung rief das selection changed Event auf. Also habe ich getan, was David Hall vorgeschlagen hat (das Event anhängen und loslösen) und ich habe es auch in einen try catch Block gesteckt und jetzt funktioniert es perfekt.
Tags und Links c# winforms datagridview