Ermittelt den Zelleninhalt einer ausgewählten Zeile in einer DataGridView

8

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

gesetzt

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.

    
Noelle 21.04.2011, 15:31
quelle

3 Antworten

12

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.

    
David Hall 21.04.2011, 15:48
quelle
1

Das funktioniert auch:

%Vor%     
RobinCominotto 31.05.2013 14:29
quelle
0

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.

    
Noelle 27.04.2011 16:27
quelle

Tags und Links