vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Zeichenfolge 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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel