checkboxcells & datagridview

DerStauner

Erfahrenes Mitglied
abend,

wie fange ich ab, dass ein checkbox in einer Zelle angeklickt wurde?

ich habe alle events des dgv-s auseinandergenommen, aber konnte nichts passendes finden.

und bevor jemand was allgemeines, wie "probiere doch cellclick, cellvaluechanged, cellbeginedit", usw. schreibt, dann soll er es selbst probieren und wird sehen, dass es nicht geht.
 
Bevor du Leute ankackst, die dir helfen wollen, solltest du vielleicht auch gesucht haben:
MSDN: DataGridView..::.CellValueChanged Event hat gesagt.:
In the case of check box cells, however, you will typically want to handle the change immediately. To commit the change when the cell is clicked, you must handle the DataGridView..::.CurrentCellDirtyStateChanged event. In the handler, if the current cell is a check box cell, call the DataGridView..::.CommitEdit method and pass in the Commit value.
http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellvaluechanged.aspx
 
und wieder mit einer eigenen Lösung:

Code:
Private Sub dgvSubPeriods_CellMouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvSubPeriods.CellMouseDown
        'ha nem a columnheader-re kattintottunk
        If e.RowIndex >= 0 Then
            Rect = dgvSubPeriods.Rows(e.RowIndex).Cells(e.ColumnIndex).ContentBounds
            'ha a checkbox-ra kattintottunk
            If rect.Contains(e.X, e.Y) Then
                Select Case e.ColumnIndex
                    'periódus lezárása oszlopban kattintottunk
                    Case 8
                        If dgvSubPeriods.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = False Then
                            For i = 4 To 7
                                DisableCell(dgvSubPeriods, e.RowIndex, i)
                            Next
                            dgvSubPeriods.EndEdit()
                        End If
                End Select
            End If
        End If
    End Sub

Code:
 Private Sub dgvSubPeriods_CellMouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvSubPeriods.CellMouseUp
        'ha nem a columnheader-re kattintottunk
        If e.RowIndex >= 0 Then
            Rect = dgvSubPeriods.Rows(e.RowIndex).Cells(e.ColumnIndex).ContentBounds
            'ha a checkbox-ra kattintottunk
            If rect.Contains(e.X, e.Y) Then
                Select Case e.ColumnIndex
                    'periódus lezárása oszlopban kattintottunk
                    Case 8
                        If dgvSubPeriods.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = True Then
                            For i = 4 To 7
                                EnableCell(dgvSubPeriods, e.RowIndex, i, Color.White, Color.Black)
                            Next
                            dgvSubPeriods.EndEdit()
                        End If
                End Select
            End If
        End If
    End Sub
 
Zuletzt bearbeitet:
Hi

Erstens ist die Lösung sehr umständlich und unschön! Und zweitens: Bist du sicher, dass es DEINE Lösung ist?
 
oh ja, richtig. ich habe nur eine copy & paste gemacht. Aus MEINER EIGENEN Code. Aber damit du mir glaubst, im Anhang findest du die vb Datei.
Damit ist das Thema erledigt.
 

Anhänge

  • FinancialYears.zip
    4,8 KB · Aufrufe: 27
ja, richtig. Leider sind die ungarischen .net Foren nicht so gut.

zwischenzeitlich habe ich diese Lösung verworfen und werde eine neue suchen. aber heute abend nicht mehr.
 
Das wusste ich ja bis dato nicht :) Und da ich von Grund auf misstrauisch bin ... ;)
Also nix für ungut und sorry für die Verdächtigung *nenkastenbierinraumstell*

Bei der Gelegenheit fällt mir ein, dass ich lange nicht mehr am Balaton war :(
 
heute habe ich folgendes Codefragment gefunden:

Code:
Private Sub dgv_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv.CellContentClick
        Dim dgCB As DataGridViewCheckBoxCell
        'wenn im column cAcc geklickt wurde
        If CType(sender, DataGridView).Columns(e.ColumnIndex).Name = "cAcc" Then
            dgCB = CType(dgv("cAcc", e.RowIndex), DataGridViewCheckBoxCell)
            If CBool(dgCB.EditedFormattedValue) Then
                MsgBox("true")
            Else
                MsgBox("false")
            End If
        End If
    End Sub

habe getestet und funktioniert einwandfrei.
 
Zurück