Benutzerdefinierte CheckBoxColumn

19/02/2008 - 12:08 von Christian Schlyia | Report spam
Hallo

Ich habe mir eine Benutzerdefinierte CheckBoxColumn für das DataGridView
geschrieben.
Diese Benötige ich, weil diese Spalte mit einem String gefüllt wird und ein
Fehler auftritt bei dessen Wandlung.

Die Klasse für die CheckBoxColumn sieht folgendermaßen aus:

Imports System
Imports System.Windows.Forms

Namespace Table_CheckBox
Public Class Column
Inherits DataGridViewColumn

Public Sub New()

MyBase.New(New Cell())

End Sub

End Class

Public Class Cell
Inherits DataGridViewCheckBoxCell

Public Sub New()

MyBase.New()

End Sub

Protected Overrides Function GetFormattedValue(ByVal value As Object,
ByVal rowIndex As Integer, _
ByRef cellStyle As
System.Windows.Forms.DataGridViewCellStyle, _
ByVal valueTypeConverter As
System.ComponentModel.TypeConverter, _
ByVal
formattedValueTypeConverter As System.ComponentModel.TypeConverter, _
ByVal context As
System.Windows.Forms.DataGridViewDataErrorContexts) As Object

Dim blnValue

If Not Boolean.TryParse(value, blnValue) Then
blnValue = CBool(Val(value))
End If

Return MyBase.GetFormattedValue(blnValue, rowIndex, _
cellStyle, valueTypeConverter, _
formattedValueTypeConverter, context)

End Function

End Class
End Namespace

Nun habe ich noch ein paar Probleme mit der Spalte.
Wenn ich in eine Zelle klicke, dann àndert diese den Status, aber das
DataGridView bekommt das erst mit, wenn ich die Zelle verlasse.
Außerdem wird die Zelle gesperrt, wenn ich ihr einen neuen Wert zuweise,
dann reagiert sie auf keinen Klick, erst dann wieder wenn ich die Zelle
verlasse und wieder hinein klicke.

Für eure Hilfe bedanke ich mich schon mal.

Gruß Chris
 

Lesen sie die antworten

#1 Peter Fleischer
20/02/2008 - 08:13 | Warnen spam
"Christian Schlyia" schrieb im Newsbeitrag
news:

Ich habe mir eine Benutzerdefinierte CheckBoxColumn für das DataGridView
geschrieben.
Diese Benötige ich, weil diese Spalte mit einem String gefüllt wird und
ein Fehler auftritt bei dessen Wandlung.

Die Klasse für die CheckBoxColumn sieht folgendermaßen aus:
...
Dim blnValue



Hi Christian,
wàre hier nicht erst einmal eine typgerechte Arbeitsweise vorzuziehen?


If Not Boolean.TryParse(value, blnValue) Then
blnValue = CBool(Val(value))



Wàre es hier nicht besser, genau zu arbeiten? CBoll für die Konvertierung
einer Gleitkommazahl in einen booleaschen Wert zu nutzen, ist bestimmt nicht
optimal. Warum vergleichst du nicht einfach?

...
Nun habe ich noch ein paar Probleme mit der Spalte.
Wenn ich in eine Zelle klicke, dann àndert diese den Status, aber das
DataGridView bekommt das erst mit, wenn ich die Zelle verlasse.



Wie meinst du das? Was sit schlecht, wenn erst mit dem Abschluss der
Edit-Operation die Daten auch bereitstehen?

Außerdem wird die Zelle gesperrt, wenn ich ihr einen neuen Wert zuweise,
dann reagiert sie auf keinen Klick, erst dann wieder wenn ich die Zelle
verlasse und wieder hinein klicke.



Hast du mal möglich Fehler abgefangen?

Viele Gruesse

Peter

Ähnliche fragen