Datetimepicker NUR an Uhrzeit binden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 37 Antworten in diesem Thema. Der letzte Beitrag () ist von Westerwälder.

    Datetimepicker NUR an Uhrzeit binden

    Hallo,

    Habe einen Datetimepicker an eine Datasource gebunden (Nur für die Uhrzeit)
    Bei Änderungen wird die Uhrzeit richtig ins DGV übernommen und auch in der Datenbank richtig abgespeichert.

    Formatierungen:
    Access - Datenbank: Datum Uhrzeit kurz (12:00)
    DGV: t, alternativ versucht HH:mm
    DTP: Customformat HH:mm; Format Custom

    Bei einem neuen Datensatz wird nun das volle Datum gesetzt (13.03.2016 10:15:00)

    Was mache ich falsch?
    Gruß Markus
    Ja sicher

    Hier das DGV und das Binden
    Spoiler anzeigen


    VB.NET-Quellcode

    1. With Me.DGV_Einzeltermine
    2. .ReadOnly = True
    3. .DataSource = Nothing
    4. .Columns.Clear()
    5. .Rows.Clear()
    6. .DataSource = SystemSetup.DataQuelle.DataSource
    7. .EnableHeadersVisualStyles = False
    8. .ColumnHeadersDefaultCellStyle.BackColor = Standard.Farben.Kontrols.Hintergrund_Nebenkontrol
    9. .ColumnHeadersDefaultCellStyle.WrapMode = DataGridViewTriState.False
    10. .Columns("ID").Visible = False
    11. .Columns("Type").Visible = False
    12. .Columns("TypeName").Visible = False
    13. .Columns("Startdatum").Visible = False
    14. .Columns("Enddatum").Visible = False
    15. .Columns("RT").Visible = False
    16. .Columns("Takt").Visible = False
    17. .Columns("DBR").Visible = False
    18. With .Columns("Anwenden")
    19. .HeaderText = " A "
    20. .ToolTipText = "Anwenden / Termin aktiv"
    21. .AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells
    22. .SortMode = DataGridViewColumnSortMode.NotSortable
    23. End With
    24. With .Columns("Bezeichnung")
    25. .HeaderText = "Termin - Bezeichnung "
    26. .AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
    27. .SortMode = DataGridViewColumnSortMode.NotSortable
    28. End With
    29. With .Columns("Datum")
    30. .HeaderText = "Termin-Datum"
    31. .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
    32. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    33. .AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader
    34. .SortMode = DataGridViewColumnSortMode.NotSortable
    35. .DefaultCellStyle.Format = "d"
    36. .ReadOnly = True
    37. End With
    38. With .Columns("Uhrzeit")
    39. .HeaderText = "Termin-Uhrzeit"
    40. .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
    41. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
    42. .AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader
    43. .SortMode = DataGridViewColumnSortMode.NotSortable
    44. .DefaultCellStyle.Format = "HH:mm"
    45. .ReadOnly = True
    46. End With
    47. If .Rows.Count > 0 Then .CurrentCell = .Rows(0).Cells("Bezeichnung")
    48. End With
    49. Me.DTP_Datum.DataBindings.Add("Value", SystemSetup.DataQuelle.DataSource, "Datum", True)
    50. Me.DTP_Uhrzeit.DataBindings.Add("Value", SystemSetup.DataQuelle.DataSource, "Uhrzeit", True)




    Neuer Datensatz:

    Spoiler anzeigen


    VB.NET-Quellcode

    1. SystemSetup.DataQuelle.AddNew()
    2. Me.DGV_Einzeltermine.CurrentCell = Me.DGV_Einzeltermine.Rows(Me.DGV_Einzeltermine.Rows.Count - 1).Cells("Bezeichnung")
    3. With Me.DGV_Einzeltermine.CurrentRow
    4. .Cells("Type").Value = "104"
    5. .Cells("TypeName").Value = "Einzeltermin"
    6. .Cells("Anwenden").Value = True
    7. .Cells("Bezeichnung").Value = "Neuer Termin"
    8. .Cells("Datum").Value = Now.ToShortDateString
    9. .Cells("Uhrzeit").Value = "06:00"
    10. .Cells("RT").Value = 0
    11. .Cells("Takt").Value = 0
    12. End With


    Gruß Markus
    Tja, mach Databinding, nicht Control-Gefummel.

    Wenn du im Datensatz eine Uhrzeit haben möchtest, dann mach in den Datensatz die Uhrzeit rein - nicht in iwelche DGV-Zellen.
    also das gilt für alle Properties.
    Also konstruiere den richtigen Datensatz, das DGV zeigt dann schon von selbst das richtige an.
    Datensatz konstruieren?
    Kenne drei Möglichkeiten einen Datensatz anzufügen.

    1) Bindingsource.addnew
    2) Neue Row in Datatable oder
    3) Neue Zeile im DGV erzeugen.

    Verwende eigentlich immer Punkt 1, setze dann die Werte, welche für den User unerheblich sind in die Current Row des DGV.
    Funktioniert eigentlich, bis nun hier auf die Uhrzeit.
    Gruß Markus
    So in der Art?

    Dim Neuanlage As DataRowView = CType(SystemSetup.DataQuelle.AddNew(), DataRowView)

    Neuanlage("Uhrzeit") = "06:00"
    wird im DGV nun angezeigt

    Der DateTimePicker springt noch nicht auf den neuen Wert

    Zu früh gefreut: In der Datenbank steht unter der Uhrzeit weiterhin das komplette Datum.
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    Weis nicht, was mit dem Teil los ist.
    Neuer Versuch:
    Private Datum_6Uhr As DateTime
    Me.Datum_6Uhr = CDate(Now.ToShortDateString & " 06:00")
    Neuanlage("Uhrzeit") = Format(CDate(Me.Datum_6Uhr), "HH:mm")

    Ergebnis: Komplettes Datum mit Uhrzeit in der Datenbank
    Gruß Markus
    Sicherlich. Datum von heute um 6 Uhr.
    Bekomme die Uhrzeit nur mit Timespan gefiltert, wird aber von der Neuanlage("Uhrzeit") abgewiesen,
    hier wird Datetime verlangt.

    Neuanlage("Uhrzeit") = Me.Datum_6Uhr.TimeOfDay
    Gruß Markus

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Westerwälder“ ()

    OK. Bleibt das Problem mit der Uhrzeit

    Private Datum_6Uhr As DateTime
    Me.Datum_6Uhr.TimeOfDay ergibt 06:00:00, obwohl ich die Sekunden nicht wollte

    wird aber von der Bindingsouce abgelehnt, da es nun ein Timespan sei.

    TimeOfDay übersetzte ich als Zeitpunkt und nicht als Zeitspanne
    Gruß Markus