Click auf dgv-Headerzeile ergibt RowIndex=0 (und nicht wie erwartet -1)

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Hanseat.

    Click auf dgv-Headerzeile ergibt RowIndex=0 (und nicht wie erwartet -1)

    Hallo zusammen,

    ich habe hier ein Problem, das hier zwar schon mal gelöst wurde, aber mir leider nicht weiter hilft:

    Folgendes Problem:
    Ich habe ein DataGridView, das an einen DataTable gebunden ist, der zur Laufzeit erstellt und via XML gefüllt wird. Per DataGridView1.CellContentClick lese ich den RowIndex der selektierten Zeile aus und verarbeite das entsprechend. Mein Problem ist, das ein Click auf die Header-Row, die ja eigentlich das dgv nur entsprechend sortieren sollte, immer mein CellContentClick-Event auslöst und als RowIndex ebenfalls die 0 zurück gibt (im Hintergrund wird sortiert, aber eben auch das Script ausgeführt)

    VB.NET-Quellcode

    1. Sub dgvHomeRetrieveBooking_Click(ByVal sender As Object, ByVal e As EventArgs) Handles dgvHomeSearchBooking.CellContentClick
    2. Dim SelektierteZeile As Integer = dgvHomeSearchBooking.CurrentCell.RowIndex
    3. End Sub


    So kann ich die Tabelle nicht sortieren, da ja immer das Ergebnis der Zeile 0 angezeigt wird. Nehme ich das Sub raus (das dgv hat damit keine Events mehr), funktioniert der Click auf die Header-Row einwandfrei.

    Wo ist mein Fehler?

    Danke Euch :)
    @Hanseat Was ganz genau soll diese Zeile bewirken?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo @Rod,

    im richtigen Script lese ich den RowIndex aus und verarbeite ihn als Wert 'SelektierteZeile' (ich rufe die Daten entsprechend auf). Ich habe das hier mal der Übersichtlichkeitswillen gekürzt.

    Ich brauche etwas, mit dem ich unterscheiden kann, ob die HeaderZeile geklickt wurde oder die erste Zeile des dgv. Und da beide den Wert '0' zurückgeben, klappt das leider nicht :(

    Danke Dir!
    Du nimmst ja hier auch die CurrentCell. Du solltest hier lieber e.RowIndex nutzen.
    Weil wenn du nämlich schon einmal in einer Zelle drin warst bleibt diese markiert und gibt dir klar diesen RowIndex wieder.

    Und dann hast du hier mit e.RowIndex schön -1 bei Header und 0 bei der ersten.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    Hanseat schrieb:

    Ich habe das hier mal der Übersichtlichkeits willen gekürzt.
    Das bringt leider nix.
    Vielleicht baust Du ein kleines Testprojekt, das Deinen Effekt reproduziert.
    Wenn wir das selbst am "lebenden Objekt" untersuchen können, können wir Dir besser helfen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @xChRoNiKx

    Danke. Das hat geholfen!
    e.RowIndex hatte bisher einen Fehler geben, aber ich habe jetzt im Sub 'e As DataGridViewCellEventArgs' (anstatt: 'e As EventArgs') eingesetzt, und damit hat e.RowIndex funktioniert. :)

    @Rod,
    beim nächsten Mal versuche ich mich klarer auszudrücken und mehr Infos geben. Danke!

    Also, korrekt funktioniert:

    VB.NET-Quellcode

    1. Sub dgvHomeRetrieveBooking_Click(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dgvHomeSearchBooking.CellContentClick
    2. Dim SelektierteZeile As Integer = e.RowIndex
    3. '[...]
    4. End Sub