DataGridView - Checkbox als Enabled darstellen

14/01/2010 - 18:11 von Manfred Z. | Report spam
Hallo Leute,

in einem Formular verfügt das Control Checkbox über die Eigenschaft "Enabled".
Je nach Einstellung àndert die Checkbox ihr Aussehen, damit man sehen kann, ob
der Zustand der Checkbox ànderbar ist oder nicht.

Ich habe in einem DataGridVie eine Spalte mit Checkboxen.
Ist die Spalte ReadOnly, dann würde ich gerne das Aussehen der Checkbox
analog zu "Enabled" = False wie bei einer Checkbox in einem Form àndern.
Leider führt die Eigenschaft ReadOnly = True der Spalte nicht dazu, das die
Boxen als nicht ànderbar dargestellt werden.

Ist ein Zugriff auf die Datstellung des Kàstchens überhaupt möglich?

Grüße

Manfred
 

Lesen sie die antworten

#1 Peter Götz
15/01/2010 - 11:29 | Warnen spam
Hallo Manfred,

in einem Formular verfügt das Control Checkbox über
die Eigenschaft "Enabled".
Je nach Einstellung àndert die Checkbox ihr Aussehen,
damit man sehen kann, ob der Zustand der Checkbox
ànderbar ist oder nicht.

Ich habe in einem DataGridVie eine Spalte mit Checkboxen.
Ist die Spalte ReadOnly, dann würde ich gerne das Aussehen
der Checkbox analog zu "Enabled" = False wie bei einer
Checkbox in einem Form àndern.
Leider führt die Eigenschaft ReadOnly = True der Spalte nicht
dazu, das die Boxen als nicht ànderbar dargestellt werden.

Ist ein Zugriff auf die Datstellung des Kàstchens überhaupt
möglich?



Auf die Darstellung des Kàstchens direkt nicht (es sei denn
Du würdest z.B. im Paint-Ereignis selbst zeichnen).
Du kannst aber auf das Ereignis DGV_ColumnStateChanged()
reagieren und dort z.B. die Hintergrundfarbe der Spalte
àndern (s. nachfolgendes Beispiel)


' /// Code in einem leeren Formmodul (Form1.vb)
Public Class Form1
Private WithEvents DGV As DataGridView
Private mDT As DataTable
Private mDV As DataView

Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load

CreateDGV()

CreateData()

With DGV
.Columns(1).DataPropertyName = "ID"
.Columns(2).DataPropertyName = "Text"
.DataSource = mDV
.AutoResizeColumns()
End With
End Sub

Private Sub CreateDGV()
DGV = New DataGridView
With DGV
.AutoGenerateColumns = False

Dim CBCol As New DataGridViewCheckBoxColumn(False)
CBCol.Name = "Check"

.Columns.Add(CBCol)
.Columns(0).DefaultCellStyle.NullValue = False

.Columns.Add("ID", "ID")

.Columns(1).DefaultCellStyle.Alignment = _
DataGridViewContentAlignment.MiddleRight

.Columns.Add("Text", "Text")

.Dock = DockStyle.Fill

.DefaultCellStyle.Font = _
New Font("Arial", 12)

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)
End With
Me.Controls.Add(DGV)

DGV.Columns(0).ReadOnly = True
End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow

mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Text", GetType(String))
For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, False)
.Rows.Add(DR)
Next
.AcceptChanges()
End With

mDV = New DataView(mDT)

End Sub


Private Sub DGV_CellContentClick _
(ByVal sender As Object, _
ByVal e As DataGridViewCellEventArgs _
) Handles DGV.CellContentClick

If e.ColumnIndex = 0 Then
Dim dgvRow As DataGridViewRow
Dim dgvCell As DataGridViewCell
Dim CValue As Object
Dim Value As Boolean

dgvRow = DGV.Rows(e.RowIndex)
dgvCell = dgvRow.Cells(e.ColumnIndex)

CValue = _
dgvCell.EditedFormattedValue

If CValue Is Nothing Then
Value = False
Else
Value = CType(CValue, Boolean)
End If

If Value Then

dgvRow.DefaultCellStyle.Font = _
New Font _
(DGV.DefaultCellStyle.Font, _
FontStyle.Bold)
Else

dgvRow.DefaultCellStyle.Font = _
New Font _
(DGV.DefaultCellStyle.Font, _
FontStyle.Regular)
End If

Me.Text = Value.ToString
End If
End Sub


Private Sub DGV_ColumnStateChanged _
(ByVal sender As Object, _
ByVal e As DataGridViewColumnStateChangedEventArgs _
) Handles DGV.ColumnStateChanged

Console.WriteLine _
("Col:" & e.Column.Index.ToString & ": " & _
e.Column.ReadOnly.ToString)

If DGV.Columns(0).ReadOnly Then
DGV.Columns(0).DefaultCellStyle.BackColor = _
Color.FromKnownColor(KnownColor.GrayText)
Else
DGV.Columns(0).DefaultCellStyle.BackColor = _
Color.FromKnownColor(KnownColor.Window)
End If
End Sub

Private Sub Form1_Shown _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles Me.Shown

If MsgBox _
("Spalte 0: ReadOnly Ändern?", _
MsgBoxStyle.YesNo Or MsgBoxStyle.Question _
) = MsgBoxResult.Yes Then

DGV.Columns(0).ReadOnly = False
End If
End Sub
End Class
' \\\ E N T E

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen