Property Grid - leeres Datum

19/02/2009 - 17:35 von Thomas Hübner | Report spam
Hi All,

ich lese aus einer Access Datenbank einen Datensatz in eine Klasse.
Diese Klasse wird in einem PropertyGrid dargestellt. Es handelt sich
um Personaldaten mit Eintritts und Austrittsdatum. Bei unbefristeten
Vertràgen wird das Austrittsdatum nicht gesetzt ist also DBNull.Value.
Wie gehe ich damit um bzw. wie kann ich im PropertyGrid ein
DBNull.Value setzen.

Gruß,
Thomas
 

Lesen sie die antworten

#1 Peter Fleischer
20/02/2009 - 10:29 | Warnen spam
"Thomas Hübner" schrieb im Newsbeitrag
news:

ich lese aus einer Access Datenbank einen Datensatz in eine Klasse.
Diese Klasse wird in einem PropertyGrid dargestellt. Es handelt sich
um Personaldaten mit Eintritts und Austrittsdatum. Bei unbefristeten
Vertràgen wird das Austrittsdatum nicht gesetzt ist also DBNull.Value.
Wie gehe ich damit um bzw. wie kann ich im PropertyGrid ein
DBNull.Value setzen.



Hi Thomas,
die DBNull kannst du in deiner Klasse abfangen und anstelle eines Date-Types
einen String übergeben. Eine Demo dazu könnte so aussehen:

Windows-Forms-Code:

Option Infer On ' Only VB9
Option Strict On

Public Class Form1

Private pg As New PropertyGrid With {.Dock = DockStyle.Fill}

Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
Me.Controls.AddRange(New Control() {pg})
pg.SelectedObject = GetRecordObject
End Sub

Private Function GetRecordObject() As RecordObject
Return New RecordObject(TestData.DataTable.Rows(0))
End Function

Friend Class RecordObject
Private _r As DataRow
Public Sub New(ByVal r As DataRow)
Me._r = r
End Sub

Public Property Name() As String
Get
Return Me._r!Name.ToString
End Get
Set(ByVal value As String)
Me._r!Name = value
End Set
End Property

Public Property Eintritt() As String
Get
If Me._r!Eintritt Is DBNull.Value Then
Return ""
Else
Return Me._r!Eintritt.ToString
End If
End Get
Set(ByVal value As String)
Dim d As Date
If Date.TryParse(value, d) Then
Me._r!Eintritt = value
Else
Me._r!Eintritt = DBNull.Value
End If
End Set
End Property

Public Property Austritt() As String
Get
If Me._r!Austritt Is DBNull.Value Then
Return ""
Else
Return Me._r!Austritt.ToString
End If
End Get
Set(ByVal value As String)
Dim d As Date
If Date.TryParse(value, d) Then
Me._r!Austritt = value
Else
Me._r!Austritt = DBNull.Value
End If
End Set
End Property

End Class

End Class

Die Datenklasse mit Testdaten dazu:

Public Class TestData
Private Shared dt As DataTable
Private Shared bs As BindingSource
Shared Sub New()
dt = New DataTable
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Eintritt", GetType(Date))
dt.Columns.Add("Austritt", GetType(Date))
Dim r As DataRow = dt.NewRow
r!Name = "abc"
r!Eintritt = Now
r!Austritt = DBNull.Value
dt.Rows.Add(r)
bs = New BindingSource(dt, "")
End Sub
Public Shared ReadOnly Property Bindingsource() As BindingSource
Get
Return bs
End Get
End Property

Public Shared ReadOnly Property DataTable() As DataTable
Get
Return dt
End Get
End Property

End Class

Viele Grüsse
Peter

Ähnliche fragen