kann ich im DataGridView.Column andere Werte zeigen als der Typ erlaubt

17/10/2009 - 21:16 von Markus Backhaus | Report spam
Hallo zusammen,
ich habe im Column ein Bit-Wert, der als true/false angezeigt wird. Kann ich
diesen Wert "benutzerspezifisch" formatieren, z.B.
für True "klein" und für False "groß" anzeigen lassen? Oder muss ich dafür
ein unbound Column hinzufügen und dort den gewünschten Wert anzeigen lassen?
Danke!
Markus
 

Lesen sie die antworten

#1 Peter Götz
18/10/2009 - 14:08 | Warnen spam
Hallo Markus,

ich habe im Column ein Bit-Wert, der als true/false
angezeigt wird.

Kann ich diesen Wert "benutzerspezifisch" formatieren,
z.B. für True "klein" und für False "groß" anzeigen lassen?



Ja in den Ereignisprozeduren

DataGridView_CellFormatting()
DataGridView_CellParsing()

kannst Du die entspr. Werte setzen.


Oder muss ich dafür ein unbound Column hinzufügen
und dort den gewünschten Wert anzeigen lassen?



Nein.

Hier ein Beispiel.

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

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

DGV = New DataGridView
With DGV
.Dock = DockStyle.Fill

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

.ColumnHeadersDefaultCellStyle.Font = _
New Font("Arial", 8, FontStyle.Bold)

End With
Me.Controls.Add(DGV)
End Sub

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

CreateData()

' DGV-Spalten definieren.
Dim i As Integer
With DGV
.AutoGenerateColumns = False
.Columns.Clear()

For i = 0 To 2

.Columns.Add _
(New DataGridViewTextBoxColumn)

With .Columns(i)
.Name = mDT.Columns(i).ColumnName
.HeaderText = .Name
.ValueType = GetType(String)
.DataPropertyName = .Name
End With
Next i

End With

DGV.DataSource = mDV

DGV.AutoResizeColumns()
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))
.Columns.Add("Bit", GetType(Boolean))
.Columns(2).AllowDBNull = True
.Columns(2).DefaultValue = DBNull.Value

For i = 1 To 7
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = WeekdayName(i, False)
DR.Item(2) = (i Mod 2 = 0)
.Rows.Add(DR)
Next

.AcceptChanges()
End With

mDV = New DataView(mDT)

End Sub

Private Sub DGV_CellFormatting _
(ByVal sender As Object, _
ByVal e As DataGridViewCellFormattingEventArgs _
) Handles DGV.CellFormatting

If e.ColumnIndex = 2 Then
Select Case True
Case e.Value Is DBNull.Value
e.Value = ""

Case CType(e.Value, Boolean) = True
e.Value = "small"

Case CType(e.Value, Boolean) = False
e.Value = "big"
End Select

e.FormattingApplied = True

End If
End Sub

Private Sub DGV_CellParsing _
(ByVal sender As Object, _
ByVal e As DataGridViewCellParsingEventArgs _
) Handles DGV.CellParsing

If e.ColumnIndex = 2 Then
Dim X As String = e.Value.ToString.ToLower
Select Case X
Case "small"
e.Value = True

Case "big"
e.Value = False


Case Else
e.Value = DBNull.Value

End Select

e.ParsingApplied = True
End If
End Sub

Private Sub DGV_CellValidating _
(ByVal sender As Object, _
ByVal e As DataGridViewCellValidatingEventArgs _
) Handles DGV.CellValidating

If e.ColumnIndex = 2 Then

Dim DC As DataGridViewTextBoxCell = _
DirectCast(DGV.Rows(e.RowIndex).Cells(2), _
DataGridViewTextBoxCell)

Dim X As String = e.FormattedValue.ToString.ToLower

Select Case X
Case ""
DC.Value = DBNull.Value

Case "big"
DC.Value = False

Case "small"
DC.Value = True

Case Else
MsgBox _
("ungültiger Wert im Feld " & _
DGV.Columns(2).Name)

e.Cancel = True

End Select
End If
End Sub

End Class
' \\\ E N T E

Nach dem Programmstart können in Spalte 2 (Bit) die
Werte "big", "small" oder "" (Leerstring) eingetragen
werden, wobei ein leeres Feld ("") als DBNull.Value
gespeichert wird, bzw. ein Feld welches DBNull.Value
enthàlt als Leerstring ("") angezeigt wird.

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

Ähnliche fragen