DGV Userfreundlicher Timestamp

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    DGV Userfreundlicher Timestamp

    Guten Tag Zusammen

    Es gibt ja für DGV's von MS eine DateTimePicker Klasse die man einbauen kann. Ich möchte mein DGV so userfreundlich wie möglich gestalten und das klappt nun auch alles bis auf ein Feld bei dem man eine Uhrzeit im Format "hh:mm" eintragen muss. hier wäre es am besten wenn man die ersten beiden Zahlen eingibt und danach wird der Doppelpunkt und die restlichen 2 Nullen automatisch hinzugefügt wenn man das Feld verlässt. Momentan hab ich zwar dieses Format aber man kann die TextBox nicht verlassen bevor man die restlichen 3 Zeichen (:00) auch geschrieben hat, was für den User sehr nervig ist. Wie kann ich das lösen?

    mfg

    Orion
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Die Funktion musst du wohl selbst basteln. Ich würde mal schaun ob ichs bei "CellLeave" reinbekomme.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Okay, bin gerade daran was zu basteln. Nur wie prüfe ich ob das eingegebene Zeitformat stimmt oder eben nicht?
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Du könntest die Eingabe durch ein Logiksieb schütten

    Wenn Zahl(##) dann
    Wenn Zahl(##) ":" dann
    Wenn Zahl(##) ":" Zahl(##) dann
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

    VB.NET-Quellcode

    1. If DataGridView1.CurrentRow.Cells(3).Value.ToString = ## Then
    2. DataGridView1.CurrentRow.Cells(3).Value = timetemp + ":00"
    3. End If

    Wie setze ich das mit den ersten beiden Zahlen als irgend ein Zeichen um? O.o
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Ich würde das ungefähr so machen

    VB.NET-Quellcode

    1. ...
    2. If isNumeric(DataGridView1.CurrentRow.Cells(3).Value.ToString) AndAlso Not DataGridView1.CurrentRow.Cells(3).Value.ToString.contains(":") Then
    3. ' :00 anhängen
    4. End If
    5. End Sub
    6. Private Function isNumeric(ByVal Zahl As String) As Boolean
    7. Dim Pruef As Double
    8. Return Double.TryParse(Zahl, Pruef)
    9. End Function
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Hmm jetzt hab ich das Problem, das der DateTime Format in der DB es nicht erlaubt die Zelle zu verlassen solange nicht ein vollständiger Wert drin steht x.x
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Hmm, das ist ärgerlich.
    Ich bin inzwischen dazu übergegangen nicht mehr direkt in ein DGV zu schreiben, sondern meine Eintragungen immer über eine Eingabemaske zu lösen. Das hat den Vorteil das ich genau sowas vorher "umwandeln" kann ohne mit Datentypen in Schwierigkeiten zu kommen.
    Dummerweise hilft dir dieser Einwand nicht wirklich.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Ich vermute da hilft nur ein erneutes ändern des Db Datentypes in String oder so was oder? :/
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Den Datentyp im DGV auf String zu ändern würde dein Problem zwar lösen wäre aber nicht so schön, denn es soll ja ein Datetime sein.

    Du könntest auch ein Custom DGV machen das eine Timestamp eingabe öffnet wenn du in das Feld klickst. Vielleicht mit 3 Textboxen für Stunde, Minute und Sekunde.
    Oder du überlegst dir eine Methode wie der TimeStamp automatisch eingetragen wird :)
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Naja, eigentlich spielt es keine Rolle was für ein Datentyp es schlussendlich ist. Damit wird nur auf einem weiteren "verschönerten" DGV dann die Zeit auf einer Anzeigetafel zur Abholung eines Paketes dargestellt. Ein Satz soll eben schnellstmöglich beim durchschreiben gemacht werden. Darum wäre das mit zusätzlicher Maske auch nicht wirklich eine Option. Ich schau dann später was ich mit der DB anstellen kann.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    1)

    Orion schrieb:

    Naja, eigentlich spielt es keine Rolle was für ein Datentyp es schlussendlich ist.
    Also ohne jetzt ein durchdachtes Konzept vorlegen zu können - hierzu kann ich schoma sagen: "Aua!"
    Der richtige Datentyp ist eiglich immer das wichtigste von allem - alles andere ist dem untergeordnet und weniger wichtig.

    2) Ob in ein String ein gültiges Datum enthält, erfährt man mit Date.TryParse (und nicht anners).
    Eben.. Eigentlich Aber im jetzigen Fall gibt es ja wohl keine andere Möglichkeit...
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    keine annere Möglichkeit als was? Einen Zeitpunkt als String in Dataset und Datenbank zu führen?
    Hab ich schon gesagt: Aua!! ;)

    Im Ernst:
    Etwa im DGV.CellParsing-Event kannst du den eingegebenen Wert nach Belieben analysieren, und auch unvollständige Eingaben iwie vervollständigen, um ein gültiges Date bereitstellen zu können.