Datagrid View - Zellenänderung wird nicht wirksam

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Peter329.

    Datagrid View - Zellenänderung wird nicht wirksam

    Hi,

    mein Problem ist nicht so ganz einfach zu beschreiben. Ich hoffe, ihr habt ein bissl Geduld mit mir.

    Ich habe eine DatagridView dgvTopics.

    Eine Spalte von dgvTopics heißt Topic und wird im Designer itmTopic benannt.

    Die dgvTopics ist mit ReadOnly=False definiert. Man kann also eine Zelle der Spalte Topic anklicken und dann einen anderen Inhalt hineinschreiben. Vorher enthielt die Zelle den Wert A, jetzt enthält sie den Wert B. Ich habe mir den RowIndex in der Variablen newIx gemerkt

    Wenn ich nun etwa über einen Button Click die folgende Anweisung ausführe:

    VB.NET-Quellcode

    1. Topic = dgvTopics.Item("itmTopic", newIx).Value


    Dann würde ich erwarten, dass die Variable Topic den neu eingegebenen Wert B enthält. Tatsächlich wird aber noch der "alte" Wert A angezeigt.

    Die Änderung der Zelle wurde offensichtlich bisher nur am Bildschirm vollzogen und noch nicht in die Datagrid View eingestellt. Erst wenn ich etwa eine andere Zeile in der Datagrid View selektiere "kommt die Änderung auch in der Datagrid View an".

    Wie kann ich denn erreichen, dass meine Änderungen "übernommen" werden, ohne dass ich zuvor eine Aktion mit der Datagrid View ausführen muss?

    Ich habe es mal mit

    VB.NET-Quellcode

    1. dgvTopics.Refresh()


    versucht. Aber das hilft leider auch nichts.

    Ich hoffe, ich habe mein Anliegen verständlich machen können!

    LG
    Peter

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

    @Peter329 Dieses Problem kannst Du sicher in einem ganz kleinen Testprojekt reproduzieren, da haben wir keine Sorge, dass wir was vergessen beim Eintippen des Codes, wenn Du es anhängst. ;)
    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!
    Jau, das kann man leicht reproduzieren.

    Aber erfreulicherweise habe ich die Lösung gerade selbst heraus gefunden. Für alle die es interessiert:

    VB.NET-Quellcode

    1. dgvTopics.EndEdit()


    Damit werden die Änderungen vom Bildschirm in die Datagrid View übernommen.

    Wenn man es weiß, dann klingt es ja auch ganz logisch ... :)

    LG
    Peter
    Die Anweisung muss vor dem Zugriff auf die Datagrid View kodiert werden:

    VB.NET-Quellcode

    1. dgvTopics.EndEdit() 'Accept dgvTopic changes from display
    2. Dim newIX = GetTopicsIndex() 'Get index of selected row (my private routine)
    3. Dim Topic = dgvTopics.Item("itmTopic", newIX).Value 'Get selected TOPIC (may be edited)
    4. ...