| |
VB.NET - FortgeschritteneZeichenfolge wurde nicht als gültiges Datetime erkannt | | | Autor: ERBRU | Datum: 02.09.21 20:30 |
| Hallo
OK, kann auch nicht da es ein String Format ist (Format, "dd.MM.yyyy") so schreib ich es in eine TextBox
habe da bzgl. Code eins zwei Fragen
1. wie kann ich es anstellen das er mir in einer DGV ein Icon setzt wenn "kein Datum angegeben ist" also die Zelle leer ist
und wenn Datum drin steht dann entsprechend der im Code geschriebenen Bedingungen hat, ein anderes ICON ?
das Datum wird als String geschrieben, kommt aus einer TextBox
Dim difference As TimeSpan
Dim Termin As Date
Dim today As Date = today
Try
For rowIndex = 0 To InventartabelleDataGridView.RowCount - 1
Dim theDate As Date = DateTime.ParseExact( _
InventartabelleDataGridView.Rows(rowIndex).Cells( _
"naechsteInventurDatum").Value.ToString, "dd.MM.yyyy", _
CultureInfo.InvariantCulture)
difference = today.Subtract(Termin)
If InventartabelleDataGridView.Rows(rowIndex).Cells( _
"naechsteInventurDatum").Value IsNot Nothing Then
InventartabelleDataGridView.Rows(rowIndex).Cells( _
"colImg").Value = Signale_20x20.Images(3) 'Warndreieck
ElseIf difference.Days <= 5 Then
InventartabelleDataGridView.Rows(rowIndex).Cells( _
"colImg").Value = Signale_20x20.Images(1) 'Gelb
ElseIf difference.Days > 5 And difference.Days <= 10 Then
InventartabelleDataGridView.Rows(rowIndex).Cells( _
"colImg").Value = Signale_20x20.Images(2) 'red
Else
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try | |
Re: Zeichenfolge wurde nicht als gültiges Datetime erkannt | | | Autor: Kuno60 | Datum: 02.09.21 22:08 |
| Die Formatangabe "dd.MM.yyyy" ist falsch!
Es muss so lauten: "dd/MM/yyyy"
Formatangaben haben eine allgemeine englische Schreibweise. Das Datum wird dann entsprechend der Landessprache richtig formatiert, vorausgesetzt man speichert es nicht als String, sondern als Date. | |
Re: Zeichenfolge wurde nicht als gültiges Datetime erkannt | | | Autor: Manfred X | Datum: 03.09.21 10:47 |
| Hallo!
Falls Du eine Date-Spalte hast und in einer weiteren Spalte ("Icon")
daten-bezogen eine Bitmap eintragen willst, kannst Du das CellPainting-Event
des Grid dafür nutzen.
Windows.Forms-Beispiel (untypisierte Datenbindung einer Datatable):
Public Class frmDGVDateIcon
Dim bs As New BindingSource
Dim WithEvents dgv As New DataGridView With
{.Parent = Me, .Size = New Drawing.Size(300, 300), .DataSource = bs}
Dim dt As New DataTable
Dim dateok, nodate As Bitmap
Private Sub frmDGVDateIcon_Load(sender As Object,
e As EventArgs) Handles MyBase.Load
'Einige Demo-Daten
dt.Columns.Add("Date", GetType(DateTime))
dt.Columns.Add("Icon", GetType(Bitmap))
With dt.Rows
.Add(Nothing, Nothing)
.Add(New DateTime(2020, 12, 10), Nothing)
.Add(New DateTime(2020, 12, 13), Nothing)
.Add(Nothing, Nothing)
.Add(New DateTime(2020, 12, 16), Nothing)
End With
'Datenbindung herstellen
bs.DataSource = dt
dgv.Columns("Icon").MinimumWidth = 16
'Zwei Bitmaps für die Icon-Spalte erstellen
nodate = New Bitmap(16, 16)
Using g As Graphics = Graphics.FromImage(nodate),
pn As New Pen(Color.White)
g.Clear(Color.Red)
g.DrawLine(pn, New Point(0, 0), New Point(16, 16))
g.DrawLine(pn, New Point(16, 0), New Point(0, 16))
End Using
dateok = New Bitmap(16, 16)
Using g As Graphics = Graphics.FromImage(dateok),
pn As New Pen(Color.Black)
g.Clear(Color.Green)
g.DrawLine(pn, New Point(0, 0), New Point(16, 16))
End Using
End Sub
Private Sub dgv_CellPainting(sender As Object,
e As DataGridViewCellPaintingEventArgs) Handles dgv.CellPainting
If (e.RowIndex >= 0 And e.RowIndex < bs.Count)
AndAlso e.ColumnIndex = 1 Then
'Gebundene Datatable-Zeile casten
Dim r As DataRow = DirectCast(bs(e.RowIndex), DataRowView).Row
'Icon-Zelle zeichnen
e.PaintBackground(e.CellBounds, True)
'Icon in der Zelle zentrieren
Dim lft As Integer =
e.CellBounds.Left + (e.CellBounds.Width - 16) \ 2
Dim tp As Integer =
e.CellBounds.Top + (e.CellBounds.Height - 16) \ 2
'Icon-Spalte abhängig vom Eintrag in der Date-Spalte zeichnen
If IsDBNull(r("Date")) Then
e.Graphics.DrawImage(nodate, lft, tp)
Else
e.Graphics.DrawImage(dateok, lft, tp)
End If
'Icon-Zelle als bearbeitet melden
e.Handled = True
End If
End Sub
End Class | |
Re: Zeichenfolge wurde nicht als gültiges Datetime erkannt | | | Autor: ERBRU | Datum: 03.09.21 11:00 |
| Hey Kuno und Manfred X
erst mal Danke für euren Post
so ganz wollte das nicht passen habe den Code geändert, nun sieht das Ergebnis schon mal so aus wie ich es wollte.
https://i.postimg.cc/zB8khnFJ/Symbole-01.jpg
' Symbole setzen wenn Datum (Termin) nicht eingetragen oder überschritten
' wurde bzw. Termin veraltet ist
Try
For rowIndex = 0 To InventartabelleDataGridView.RowCount - 1
Dim s As String = InventartabelleDataGridView.Rows( _
rowIndex).Cells("naechsteInventurDatum").Value.ToString
Dim d As Date
If InventartabelleDataGridView.Rows(rowIndex).Cells( _
"naechsteInventurDatum").Value IsNot Nothing Then
InventartabelleDataGridView.Rows(rowIndex).Cells( _
"colImg").Value = AB_Images(5) 'Warndreieck
End If
If Date.TryParseExact(s, "dd.MM.yyyy", New _
Globalization.CultureInfo("de-DE"), _
Globalization.DateTimeStyles.None, d) Then
' korrekt
If (Now - d).Days < 4 Then
InventartabelleDataGridView.Rows(rowIndex).Cells( _
"colImg").Value = AB_Images(3) 'Gelb
ElseIf (Now - d).Days < 5 Then
InventartabelleDataGridView.Rows(rowIndex).Cells( _
"colImg").Value = AB_Images(2) 'red
Else
End If
End If
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try Habe aber noch eine Frage:
geht das auch etwas schneller ? wer Idee hat bitte melden
ich möchte noch wenn User mit der Maus über Cell mit Datum eine Info bekommt wie alt der Termin ist
Danke euch
Beitrag wurde zuletzt am 03.09.21 um 11:02:28 editiert. | |
Re: Zeichenfolge wurde nicht als gültiges Datetime erkannt | | | Autor: ERBRU | Datum: 03.09.21 11:11 |
| Hallo,
habe in meinem letzten Post ein Bild angehängt da sieht man besser was ich meine das Beispiel von dir nehme ich dankend an.
wie kann ich den Termin der eingetragen wird.
Dem User eine info ausgeben Achtung in X Tagen Inventur fällig, oder Inventur war vor X Tagen fällig bis man einen neuen Termin einträgt ?
Danke | |
Re: Zeichenfolge wurde nicht als gültiges Datetime erkannt | | | Autor: ERBRU | Datum: 10.09.21 13:45 |
| könnt ihr mir auf den letzten Post von mir antworten!
würdet ihr die Lösung annehmen, oder anders vorgehen ? ich gebe zu Elegant und schneller geht ein bisschen anders.
MFG
Danke | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|