DataGridView Button als sender erkennen und Text bei Klick ändern

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    DataGridView Button als sender erkennen und Text bei Klick ändern

    Guten Tag,

    Ich möchte einen Button in meinen DataGridView durch einen Klick auf ihn umbenennen. In diesem Fall soll er von "No" auf "Yes" umbenannt werden. Jedoch klappt es nicht. Der untere Code ist mein letztes Ergebnis.

    C#-Quellcode

    1. private void dgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
    2. {
    3. var senderGrid = (DataGridView)sender;
    4. if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
    5. {
    6. DataGridViewButtonCell senderBtn = (DataGridViewButtonCell)senderGrid.Rows[e.RowIndex].Cells[e.ColumnIndex];
    7. senderBtn.Value = "Yes";
    8. }
    9. }


    Und davon das Ergebnis:


    e.RowIndex und e.ColumnIndex sind richtig (ich habe es überprüft).

    Irgendwelche Lösungsansätze? Ich habe überall gesucht, aber keine Lösung für mein Problem gefunden. Der Code von oben ist auch das Ergebnis einer langen Suche. Ich kann den Text zwar durch den Code lesen vom Button, aber ich kann ihn einfach nicht setzen. Ich erhalte keine Fehler.
    @VB1963 Leider finde ich dort keine Lösungen oder Ansätze zu meinem Problem. Ich habe den Button bereits mit diesem Abschnitt abgefangen:

    C#-Quellcode

    1. ​if (senderGrid.Columns[e.ColumnIndex] is DataGridViewButtonColumn && e.RowIndex >= 0)
    2. {
    3. Console.WriteLine(e.RowIndex + " | " + e.ColumnIndex);
    4. DataGridViewButtonCell senderBtn = (DataGridViewButtonCell)senderGrid.Rows[e.RowIndex].Cells[e.ColumnIndex];
    5. senderBtn.Value = "Yes";
    6. }


    Der letzte Schritt der mir fehlt, funktioniert nicht in diesem Teil:

    C#-Quellcode

    1. ​senderBtn.Value = "Yes";


    Die Value müsste jetzt eigentlich der Text es Buttons sein, aber beim Klick scheint nichts zu passieren. Der Button heißt weiterhin "No", jedoch wird der Code 100% ausgeführt.
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Tatsächlich habe ich gerade eben erst den Fehler gefunden und er ist wirklich absurd. Es scheint so, als würde die Eigenschaft "UseColumnTextForButtonValue" nicht nur dafür sorgen das der Text vom Button (die Value der Cell, sorry für das Missverständnis) angezeigt wird, sondern der Defaullt-Wert auch dauerhaft aktualisiert wird. Der Code hat super funktioniert, nur schien das Problem zu sein, dass UseColumnTextForButtonValue nicht nur beim initialisieren der Zelle angewendet wird.

    Ich habe die Option jedoch angelassen, damit der Text bei einer neuen Row automatisch "No" ist und nur für die Buttons die bereits angeklickt wurden, die Option "UseColumnTextForButtonValue" auf False gesetzt, da sie nun einen neue Value haben. Davor war die Value nämlich trotz Default-Wert "null".

    Ich hoffe das macht Sinn, vielen Dank für eure Hilfe.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()