Announcement

Collapse
No announcement yet.

Geänderten Wert einer CheckBox in DataGridView abfragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Geänderten Wert einer CheckBox in DataGridView abfragen

    Hallo,

    Ich habe eine DatagridView, die eine DataGridViewCheckBoxColumn enthält.
    Auf Änderungen der Werte in beliebigen Zelltypen kann ich problemlos reagieren, nur bei den CheckBoxen scheinen die Events vor der tatsächlichen Wertänderung zu passieren.

    Ich möchte quasi, wenn eine CheckBox in der DGV geckeckt bzw. unchecked wird, auf die Wertänderung reagieren.
    Hat eine CheckBox den Status checked und ich klicke drauf, wird sie unchecked. Allerdings kann ich den neuen Wert nicht prüfen, es wird immer der alte herangezogen.
    Nach meinen Event-Methoden ist der Wert in der Box natürlich geändert, aber eben erst danach!

    Folgende Events habe ich getestet:
    • CellValueChanged
    • CellClick
    • CellContentClick
    • CellMouseClick
    • CellMouseUp
    • MouseUp


    Alle anderen Events kamen mir nicht sonderlich passend vor. Habe ich etwas übersehen oder müssen CheckBoxen in DGVs anders behandelt werden, wie andere Zelltypen?

    Danke für Hinweise
    PHP rocks!
    Eine Initiative der PHP Community

  • #2
    Alle anderen Events kamen mir nicht sonderlich passend vor. Habe ich etwas übersehen oder müssen CheckBoxen in DGVs anders behandelt werden, wie andere Zelltypen?
    Nein sie müssen nicht anders behandelt werden. Das Problem ist das du anderes Verhalten als bei anderen Editoren erwartest
    Der Value eines Editors wird beim Verlieren des Focus in die dahinterliegende Datenmenge übernommen. Bei einer Textbox wird ja auch nicht der Text übernommen während man noch schreibt.
    Wenn du den Wert früher übernehmen willst dann musst du dem Grid sagen das es das entgegen dem Standardverhalten (dem Standardverhalten aller Editoren nicht nur der der CheckBox) tun soll.

    Das ginge z.B. in CellContentClick so
    [HIGHLIGHT=C#]
    private void myLovelyDgv_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
    if (e.ColumnIndex == myLovelyCheckBoxColumn.Index)
    {
    // hier alter Wert in gebundener Datenmenge
    myLovelyDgv.CommitEdit(DataGridViewDataErrorContex ts.Commit);
    // ab hier neuer übernommener Wert in Datenmenge
    }
    }[/HIGHLIGHT]

    Comment


    • #3
      Traumhaft erklärt, danke!

      Ok, auf CommitEdit hätte ich bei intensiverer Suche evtl. auch stoßen können.
      Danke, so funktioniert es einwandfrei:
      [highlight=csharp]
      private void dgvPositions_CellContentClick(object sender, DataGridViewCellEventArgs e) {

      if (e.ColumnIndex == dcolApply.Index)
      dgvPositions.CommitEdit( DataGridViewDataErrorContexts.Commit );

      // ...

      }
      [/highlight]
      PHP rocks!
      Eine Initiative der PHP Community

      Comment

      Working...
      X