DGV Datumsformat anpassen geht nicht.

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

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von Orion.

    DGV Datumsformat anpassen geht nicht.

    Guten Tag Zusammen

    Hab wieder eine Frage. Ich habe ein Ansichts DGV die eine Tabelle aus der Datenbank darstellen soll. Darin befindet sich ein DateTime Wert den ich genutzt habe für die Zeit eingabe im Format "00:00" Habe dazu auch im DGV das Format eingestellt auf t. Wenn ich nun aber das DGV lade setzt er mir trotzdem noch ein Datum vornedran. Wie behebe ich das?

    mfg Orion

    Formatseinstellung:


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

    Sample anhängen geht schlecht weil wie schon mal gesagt, ist es ein Firmenprojekt. Aber vielleicht hilft es wenn ich den Form_Load Code poste?
    Vielleicht ist hier ein Konflikt drin oder so...
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Ansicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. 'TODO: Diese Codezeile lädt Daten in die Tabelle "PmdbDataSet.Kunde". Sie können sie bei Bedarf verschieben oder entfernen.
    3. Me.KundeTableAdapter.Fill(Me.PmdbDataSet.Kunde)
    4. 'TODO: Diese Codezeile lädt Daten in die Tabelle "PmdbDataSet.Datatable". Sie können sie bei Bedarf verschieben oder entfernen.
    5. 'Me.ZeitDataGridViewTextBoxColumn.DefaultCellStyle.Format = "hh:mm tt"
    6. Me.DatatableTableAdapter.Fill(Me.PmdbDataSet.Datatable)
    7. Try
    8. For Each r As DataGridViewRow In Me.DataGridView1.Rows
    9. If r.Cells(0).Value.ToString = "Offen" Then
    10. r.Cells(0).Style.ForeColor = Color.Red
    11. r.Cells(1).Style.ForeColor = Color.Red
    12. r.Cells(2).Style.ForeColor = Color.Red
    13. r.Cells(3).Style.ForeColor = Color.Red
    14. r.Cells(4).Style.ForeColor = Color.Red
    15. r.Cells(5).Style.ForeColor = Color.Red
    16. r.Cells(6).Style.ForeColor = Color.Red
    17. r.Cells(7).Style.ForeColor = Color.Red
    18. End If
    19. If r.Cells(0).Value.ToString = "Erledigt" Then
    20. r.Cells(0).Style.ForeColor = Color.Gray
    21. r.Cells(1).Style.ForeColor = Color.Gray
    22. r.Cells(2).Style.ForeColor = Color.Gray
    23. r.Cells(3).Style.ForeColor = Color.Gray
    24. r.Cells(4).Style.ForeColor = Color.Gray
    25. r.Cells(5).Style.ForeColor = Color.Gray
    26. r.Cells(6).Style.ForeColor = Color.Gray
    27. r.Cells(7).Style.ForeColor = Color.Gray
    28. End If
    29. If r.Cells(0).Value.ToString = "Geplant" Then
    30. r.Cells(0).Style.ForeColor = Color.Green
    31. r.Cells(1).Style.ForeColor = Color.Green
    32. r.Cells(2).Style.ForeColor = Color.Green
    33. r.Cells(3).Style.ForeColor = Color.Green
    34. r.Cells(4).Style.ForeColor = Color.Green
    35. r.Cells(5).Style.ForeColor = Color.Green
    36. r.Cells(6).Style.ForeColor = Color.Green
    37. r.Cells(7).Style.ForeColor = Color.Green
    38. End If
    39. Next r
    40. 'Me.ZeitDataGridViewTextBoxColumn.DefaultCellStyle.Format = "hh:mm tt"
    41. Catch ex As Exception
    42. 'MsgBox(ex.ToString)
    43. End Try
    44. End Sub
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Ich dachte, du hattest das Format für die Zeit im Designer des DGV eingestellt?
    Im FormLoad-Ereignis hast du es ja richtigerweise wegkommentiert - und da brauchst du es ja auch nicht.
    Da muss in deinem Code noch wo anders ein Format angegeben sein...

    In deinem FormLoad-Event gehören eigentlich nur deine Fill-Methoden.
    Den ganzen Try-Catch tust du wieder weg.
    Versuche deine DGV-Felder mit dem CellPaint-Ereignis einzufärben - zu dem ist es ja auch da...
    Da wurde in einem anderen Thread bereits darauf hingewiesen
    Da im Code selber ja nicht viel Infos über das Projekt selber sind, hier mal der gesamte Code für die Ansichtsform:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Collections.Generic
    2. Imports System.ComponentModel
    3. Imports System.Data
    4. Imports System.Drawing
    5. Imports System.Text
    6. Imports System.Windows.Forms
    7. Imports System.IO
    8. Imports System.Diagnostics
    9. Imports PackageManagerV2.pmdbDataSet
    10. Partial Public Class Ansicht
    11. Inherits Form
    12. Private Sub Ansicht_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    13. 'TODO: Diese Codezeile lädt Daten in die Tabelle "PmdbDataSet.Kunde". Sie können sie bei Bedarf verschieben oder entfernen.
    14. Me.KundeTableAdapter.Fill(Me.PmdbDataSet.Kunde)
    15. 'TODO: Diese Codezeile lädt Daten in die Tabelle "PmdbDataSet.Datatable". Sie können sie bei Bedarf verschieben oder entfernen.
    16. 'Me.ZeitDataGridViewTextBoxColumn.DefaultCellStyle.Format = "hh:mm tt"
    17. Me.DatatableTableAdapter.Fill(Me.PmdbDataSet.Datatable)
    18. Try
    19. For Each r As DataGridViewRow In Me.DataGridView1.Rows
    20. If r.Cells(0).Value.ToString = "Offen" Then
    21. r.Cells(0).Style.ForeColor = Color.Red
    22. r.Cells(1).Style.ForeColor = Color.Red
    23. r.Cells(2).Style.ForeColor = Color.Red
    24. r.Cells(3).Style.ForeColor = Color.Red
    25. r.Cells(4).Style.ForeColor = Color.Red
    26. r.Cells(5).Style.ForeColor = Color.Red
    27. r.Cells(6).Style.ForeColor = Color.Red
    28. r.Cells(7).Style.ForeColor = Color.Red
    29. End If
    30. If r.Cells(0).Value.ToString = "Erledigt" Then
    31. r.Cells(0).Style.ForeColor = Color.Gray
    32. r.Cells(1).Style.ForeColor = Color.Gray
    33. r.Cells(2).Style.ForeColor = Color.Gray
    34. r.Cells(3).Style.ForeColor = Color.Gray
    35. r.Cells(4).Style.ForeColor = Color.Gray
    36. r.Cells(5).Style.ForeColor = Color.Gray
    37. r.Cells(6).Style.ForeColor = Color.Gray
    38. r.Cells(7).Style.ForeColor = Color.Gray
    39. End If
    40. If r.Cells(0).Value.ToString = "Geplant" Then
    41. r.Cells(0).Style.ForeColor = Color.Green
    42. r.Cells(1).Style.ForeColor = Color.Green
    43. r.Cells(2).Style.ForeColor = Color.Green
    44. r.Cells(3).Style.ForeColor = Color.Green
    45. r.Cells(4).Style.ForeColor = Color.Green
    46. r.Cells(5).Style.ForeColor = Color.Green
    47. r.Cells(6).Style.ForeColor = Color.Green
    48. r.Cells(7).Style.ForeColor = Color.Green
    49. End If
    50. Next r
    51. 'Me.ZeitDataGridViewTextBoxColumn.DefaultCellStyle.Format = "hh:mm tt"
    52. Catch ex As Exception
    53. 'MsgBox(ex.ToString)
    54. End Try
    55. End Sub
    56. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    57. Try
    58. DataGridView1.Dispose()
    59. Me.Close()
    60. Catch
    61. End Try
    62. End Sub
    63. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    64. 'TODO: Diese Codezeile lädt Daten in die Tabelle "PmdbDataSet.Datatable". Sie können sie bei Bedarf verschieben oder entfernen.
    65. Me.DatatableTableAdapter.Fill(Me.PmdbDataSet.Datatable)
    66. DataGridView1.Update()
    67. 'Me.ZeitDataGridViewTextBoxColumn.DefaultCellStyle.Format = "hh:mm tt"
    68. Try
    69. For Each r As DataGridViewRow In Me.DataGridView1.Rows
    70. If r.Cells(0).Value.ToString = "Offen" Then
    71. r.Cells(0).Style.ForeColor = Color.Red
    72. r.Cells(1).Style.ForeColor = Color.Red
    73. r.Cells(2).Style.ForeColor = Color.Red
    74. r.Cells(3).Style.ForeColor = Color.Red
    75. r.Cells(4).Style.ForeColor = Color.Red
    76. r.Cells(5).Style.ForeColor = Color.Red
    77. r.Cells(6).Style.ForeColor = Color.Red
    78. r.Cells(7).Style.ForeColor = Color.Red
    79. End If
    80. If r.Cells(0).Value.ToString = "Erledigt" Then
    81. r.Cells(0).Style.ForeColor = Color.LightGray
    82. r.Cells(1).Style.ForeColor = Color.LightGray
    83. r.Cells(2).Style.ForeColor = Color.LightGray
    84. r.Cells(3).Style.ForeColor = Color.LightGray
    85. r.Cells(4).Style.ForeColor = Color.LightGray
    86. r.Cells(5).Style.ForeColor = Color.LightGray
    87. r.Cells(6).Style.ForeColor = Color.LightGray
    88. r.Cells(7).Style.ForeColor = Color.LightGray
    89. End If
    90. If r.Cells(0).Value.ToString = "Geplant" Then
    91. r.Cells(0).Style.ForeColor = Color.LightGreen
    92. r.Cells(1).Style.ForeColor = Color.LightGreen
    93. r.Cells(2).Style.ForeColor = Color.LightGreen
    94. r.Cells(3).Style.ForeColor = Color.LightGreen
    95. r.Cells(4).Style.ForeColor = Color.LightGreen
    96. r.Cells(5).Style.ForeColor = Color.LightGreen
    97. r.Cells(6).Style.ForeColor = Color.LightGreen
    98. r.Cells(7).Style.ForeColor = Color.LightGreen
    99. End If
    100. Next r
    101. Catch ex As Exception
    102. 'MsgBox(ex.ToString)
    103. End Try
    104. Timer1.Start()
    105. End Sub
    106. Private Sub DataGridView1_SelectionChanged(sender As Object, e As EventArgs) Handles DataGridView1.SelectionChanged
    107. DataGridView1.ClearSelection()
    108. End Sub
    109. End Class

    Ich seh da jetzt nichts was reinfunken könnte.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Wie gesagt, wenn du im Designer bereits das Format mit "t" festgelegt hast, dann tue zumindest auch noch Zeile #80 raus...
    Irgendwo im anderen Codegefüge noch weitersuchen und die Vorschläge in meinen vorigen Post nochmals anschauen...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    Das ist ja alles aukommentiert. War nur zum testen da weils eben nicht funktioniert...
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Orion schrieb:

    VB.NET-Quellcode

    1. Me.ZeitDataGridViewTextBoxColumn.DefaultCellStyle.Format = "hh:mm tt"
    Deine Format-Vorgabe ist Grütze.
    Such Dir im Designer das richtige Format aus und schreib die Formatierungs-Zeichenfolge ab:
    "D", "f", "t", "F" usw.
    Bilder
    • Format.png

      25,85 kB, 486×400, 141 mal angesehen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hab ich doch gemacht x.x es will aber nicht gehen @.@
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Orion schrieb:

    Hab ich doch gemacht
    Probier mal dies, Form mit DGV, 3 Button:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private table As DataTable
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Me.InitDataTable()
    5. Dim newRow As DataRow = Me.table.NewRow()
    6. newRow(0) = "bla"
    7. newRow(1) = DateTime.Now
    8. Me.table.Rows.Add(newRow)
    9. Me.DataGridView1.DataSource = Me.table
    10. End Sub
    11. Private Sub InitDataTable()
    12. Me.table = New DataTable()
    13. Me.table.TableName = "Filme"
    14. Me.table.Columns.Add(New DataColumn() With { _
    15. .ColumnName = "Title", _
    16. .DataType = GetType(String) _
    17. })
    18. Me.table.Columns.Add(New DataColumn() With { _
    19. .ColumnName = "Datum", _
    20. .DataType = GetType(DateTime) _
    21. })
    22. Me.table.DefaultView.Sort = "Title ASC" ' "DESC"
    23. End Sub
    24. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    25. Me.DataGridView1.DefaultCellStyle.Format = "D"
    26. End Sub
    27. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    28. Me.DataGridView1.DefaultCellStyle.Format = "F"
    29. End Sub
    30. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    31. Me.DataGridView1.DefaultCellStyle.Format = "t"
    32. End Sub
    33. End Class
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja, Button 1 und 3 machen was sie sollen. Muss ich nun das DGV umschreiben zu manuellem befüllen? Oder was genau wäre die beste Option?
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Orion schrieb:

    beste Option
    Poste mal Deinen Code / Dein Projekt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hast du nun mit Designer, wie im Eingangspost beschrieben das Format eingestellt (Ja oder Nein) ?
    Wenn Nein, dann mache es...
    Wenn Ja, dann suche mit der Schnellsuche deinen gesamten ProjektCode ab, wo ZeitDataGridViewTextBoxColumn.DefaultCellStyle.Format = steht und schaue danach...
    @RodFromGermany
    Ich kann eben leider nicht den ganzen Code posten :/
    Habe jetzt aber folgendes probiert auszuführen mit dem Button auf der richtigen DGV

    VB.NET-Quellcode

    1. ​Me.DataGridView1.Columns("Zeit").DefaultCellStyle.Format = "t"

    Wenn ich ihn ausführ bekomm ich eine Nullreference Exception. Mach ich dasselbe jedoch mit dem ersten DateTime Feld funktioniert es.(Auf diesem wird es aber nicht gebraucht.)
    @VB1963
    Ja, hab ich alles schon gemacht...
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Das DGV ist so aufgebaut:
    Status | Auftrag | Termin | Info | Zeit | Kunde | Adresse | Zusatzinfo

    In der Spalte Termin ist ein ganz normales DateTime und in der Spalte Zeit kommt dann eben eine 24h Ansicht die mit Info zusammenhängt in der man eine Combobox mit nicht vor, bis und - hat. Die Column Zeit existiert auch...
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Okay, hier ist die Meldung die ich bekomme:
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Teile die Zeile auf mehrere Zeilen auf...

    VB.NET-Quellcode

    1. Dim dgv = Me.DataGridView1
    2. Dim col = dgv.Columns("Zeit")
    3. Dim stl = col.DefaultCellStyle
    4. Dim fmt = stl.Format = "t"
    und probiere es nochmals
    oder fahre mit der Maus über deine Fehlerzeile und schau was dir die IDE dazu sagt...
    Bei

    VB.NET-Quellcode

    1. Dim stl = col.DefaultCellStyle

    unterbricht er mit demselben NullReference Fehler... Ganz genau in der Zeile kann ichs mir nicht anzeigen lassen.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)