Datumswert im DataGridView löschen

21/07/2008 - 16:42 von Kurt Tagliati | Report spam
Hallo zusammen

Ich bearbeite Daten aus einer SQL-DB mit einem DataGridView.
Sobald ich ein Datum im DGV lösche und auf ein anderes Feld springe erhalte
ich die Fehlermeldung "...Die Zeichenfolge wurde nicht als gültiges DateTime
erkannt..."

Das Feld ist in der DB mit "Nullwerte zulassen = True" definiert.
Im DGV ist als Format "d" angegeben.

Wie bringe ich es fertig, dass man den Eintrag im Datumsfeld löschen kann?

Vielen Dank
Kurt
 

Lesen sie die antworten

#1 Peter Götz
21/07/2008 - 18:31 | Warnen spam
Hallo Kurt,

Ich bearbeite Daten aus einer SQL-DB mit einem
DataGridView.
Sobald ich ein Datum im DGV lösche und auf ein
anderes Feld springe erhalte ich die Fehlermeldung
"...Die Zeichenfolge wurde nicht als gültiges DateTime
erkannt..."



Was ist denn die Datenquelle (DataSource) für Dein DGV?
Ist es eine
DataTable?
DataView?
BindingSource?

Das Feld ist in der DB mit "Nullwerte zulassen = True"
definiert. Im DGV ist als Format "d" angegeben.



Wo genau ist als Format "d" angegeben (Code?).


Wie bringe ich es fertig, dass man den Eintrag im
Datumsfeld löschen kann?



Hast Du in irgendeiner Ereignisprozedur, welche beim
Datensatzwechsel ausgelöst wird, Code stehen, der auf
das betr. Feld der zugrundeliegenden DataSource
zugreift?

Hier mal ein Beispiel, bei dem sich ein Datum
im DGV löschen làsst.

' /// Code in einer leeren Form1
Public Class Form1
Private WithEvents DGV As DataGridView
Private mDT As DataTable
Private WithEvents mBS As BindingSource


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

Me.Size = New Size(350, 300)
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)

CreateData()

DGV.DataSource = mBS
DGV.AutoResizeColumns()
End Sub

Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow
Dim Rnd As New Random(Now.Millisecond)

mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns(0).Unique = True

.Columns.Add("WTag", GetType(String))
.Columns.Add("Zeit", GetType(Date))
For i = 1 To 7
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = WeekdayName(i, False)

Dim D As Date = Now.AddDays(Rnd.Next(1, 360))
D = D.AddSeconds(Rnd.Next(0, 36000))
DR.Item(2) = D

.Rows.Add(DR)
Next
.AcceptChanges()
End With

mBS = New BindingSource
mBS.DataSource = mDT
End Sub

Private Sub mBS_PositionChanged _
(ByVal sender As Object, _
ByVal e As System.EventArgs _
) Handles mBS.PositionChanged

Dim drv As DataRowView = _
DirectCast(mBS.Current, DataRowView)

Dim ID As Integer
Dim WTag As String
Dim Datum As String

With drv
ID = CInt(.Item(0))
WTag = .Item(1).ToString

' ***************************************************
' Hier muss geprüft werden, ob das Datumsfeld
' leer ist oder einen gültigen Datumswert enthàlt.
If .Item(2) Is DBNull.Value Then
Datum = "DBnull"
Else
Datum = _
Format(CType(.Item(2), Date), _
"dd.MM.yyyy HH:mm:ss")
End If
' ***************************************************

End With
Me.Text = ID.ToString & "; " & _
WTag & "; " & _
Datum
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