none
CellValueChanged gleich auslösen RRS feed

  • Frage

  • Hallo allerseits!

    Habe leider ein Problem mit dem auslösen des Events "CellValueChanged" wenn eine CheckBox im DataGridView aus- bzw. abgewählt wird.
    Sobald eine der CheckBoxen ausgewählt wird sollte der Event gleich ausgelöst werden und nicht nach dem eine andere Zeile ausgewählt wurde.

    Habe mir dazu auch mehrere Events u.a. "CellClick" und "CellEndEdit" angesehen aber überall wird der vorherige Zustand vom CheckBox angezeigt.

    Wäre für jede Hilfe sehr dankbar

    Lg

    GeRi

    Mittwoch, 15. Januar 2020 09:17

Antworten

  • Hi,
    nimm einfach das MouseUp und beende den Edit-Modus, z.B. so:

    Public Class Form1
    
      Private WithEvents dgv As New DataGridView With {.Dock = DockStyle.Fill}
    
      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Controls.Add(dgv)
        AddHandler dgv.MouseUp, AddressOf dgv_MouseUp
        Dim col As New List(Of Data)
        For i = 1 To 10
          col.Add(New Data With {.ID = i})
        Next
        dgv.DataSource = col
      End Sub
    
      Private Sub dgv_MouseUp(sender As Object, e As MouseEventArgs)
        Dim dgviewcbcell = TryCast(dgv.CurrentCell, DataGridViewCheckBoxCell)
        If dgviewcbcell Is Nothing Then Exit Sub
        dgv.EndEdit()
        Console.WriteLine(dgviewcbcell.Value)
      End Sub
    
      Class Data
        Public Property ID As Integer
        Public Property IsChecked As Boolean = False
      End Class
    
    End Class


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    • Bearbeitet Peter Fleischer Mittwoch, 15. Januar 2020 11:48
    • Als Antwort markiert geRe.LI Mittwoch, 15. Januar 2020 12:09
    Mittwoch, 15. Januar 2020 11:47

Alle Antworten

  • Hi,
    nimm einfach das MouseUp und beende den Edit-Modus, z.B. so:

    Public Class Form1
    
      Private WithEvents dgv As New DataGridView With {.Dock = DockStyle.Fill}
    
      Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Me.Controls.Add(dgv)
        AddHandler dgv.MouseUp, AddressOf dgv_MouseUp
        Dim col As New List(Of Data)
        For i = 1 To 10
          col.Add(New Data With {.ID = i})
        Next
        dgv.DataSource = col
      End Sub
    
      Private Sub dgv_MouseUp(sender As Object, e As MouseEventArgs)
        Dim dgviewcbcell = TryCast(dgv.CurrentCell, DataGridViewCheckBoxCell)
        If dgviewcbcell Is Nothing Then Exit Sub
        dgv.EndEdit()
        Console.WriteLine(dgviewcbcell.Value)
      End Sub
    
      Class Data
        Public Property ID As Integer
        Public Property IsChecked As Boolean = False
      End Class
    
    End Class


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    • Bearbeitet Peter Fleischer Mittwoch, 15. Januar 2020 11:48
    • Als Antwort markiert geRe.LI Mittwoch, 15. Januar 2020 12:09
    Mittwoch, 15. Januar 2020 11:47
  • Hallo Peter,

    vielen Dank hat super funktioniert ;-)

    Lg

    GeRi

    Mittwoch, 15. Januar 2020 12:09