Datagrid Header senkrecht anzeigen

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

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    Datagrid Header senkrecht anzeigen

    Hallo,

    bei einem Header eines Datagridviews ist mir aufgefallen, dass ein Zeilenumbruch in die falsche Richtung geht.

    Das Besondere bei der Anzeige ist, dass diese senkrecht angezeigt werden:

    In der Spalte "AutoBoot Wartezeit" wird das Wort "zeit" rechts neben "AutoBoot Warte" angezeigt.

    Das Wort "Zeit" sollte links vom "AutoBoot Warte" angezeigt werden.

    Weiß jemand, wo diese Einstellung vorgenommen werden muss?

    Ein kleiner Schöheitsfehler:
    Wie man im Screenshot sehen kann, werden die Titel einer Überschrift direkt an den unteren Rand geklatscht. In der Webseitenprogrammierung gibt es hierfür u.a. die Eigenschaften "Padding" oder "Margin", mit denen ein Rand definiert werden kann. In .net scheint es solche Eigenschaften nicht zu geben. Weiß jmand, wie ein kleiner Rand definiert werden kann?

    Folgender VB.net Code wird eingesetzt, um die Header Vertical anzeigen lassen zu können:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub DataGridView1_CellPainting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellPaintingEventArgs) Handles DataGridView1.CellPainting
    2. Dim myDefault = DataGridView1.ColumnHeadersDefaultCellStyle
    3. Dim myDefaultColor As New ControlColor
    4. myDefaultColor.BackColor = myDefault.BackColor
    5. myDefaultColor.ForeColor = myDefault.ForeColor
    6. Dim myColor As ControlColor = HeadColumn_Color(e.ColumnIndex, myDefaultColor)
    7. If e.RowIndex = -1 Then
    8. With e.Graphics
    9. Dim myBgBrush = New SolidBrush(myColor.BackColor)
    10. Dim myTextBrush = New SolidBrush(myColor.ForeColor)
    11. 'myTextBrush = New SolidBrush(HeadColumn_ForeColor(e.ColumnIndex, myDefault.ForeColor))
    12. .FillRectangle(myBgBrush, e.CellBounds)
    13. '.FillRectangle(Brushes.AliceBlue, e.CellBounds)
    14. Dim myPen = New Pen(myTextBrush)
    15. .DrawLine(myPen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1)
    16. .DrawLine(myPen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1)
    17. Dim myAlign = ConvertAlignToLineAlign(myDefault.Alignment)
    18. 'Using sf As New StringFormat With {.Alignment = StringAlignment.Far, .LineAlignment = StringAlignment.Center, .FormatFlags = StringFormatFlags.DirectionVertical}
    19. Using sf As New StringFormat With {.Alignment = myAlign.Alignment, .LineAlignment = myAlign.lineAlignment, .FormatFlags = StringFormatFlags.DirectionVertical}
    20. If e.ColumnIndex >= 0 Then
    21. Using fnt As New Font(DataGridView1.Font.FontFamily, 10, myDefault.Font.Style)
    22. .DrawString(DataGridView1.Columns(e.ColumnIndex).HeaderText, fnt, myTextBrush, e.CellBounds, sf)
    23. End Using
    24. End If
    25. End Using
    26. e.Handled = True
    27. End With
    28. Else
    29. If e.ColumnIndex >= 0 Then
    30. ' Daten-Zellen
    31. Dim myCell = DataGridView1.Rows(e.RowIndex).Cells(e.ColumnIndex)
    32. Dim bReadonly As Boolean = myCell.ReadOnly
    33. With myCell.Style
    34. .ForeColor = If(bReadonly, ColorFormatControl.InvertColor(myColor.ForeColor), myColor.ForeColor)
    35. .BackColor = If(bReadonly, ColorFormatControl.InvertColor(myColor.BackColor), myColor.BackColor)
    36. End With
    37. End If
    38. End If
    39. End Sub


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BigBen2003“ ()

    Ergänze die StringFormat-Zeile am Ende mit Or StringFormatFlags.DirectionRightToLeft, dann läuft's - AFAICS:

    VB.NET-Quellcode

    1. Using sf As New StringFormat With {.Alignment = StringAlignment.Center, .LineAlignment = StringAlignment.Far, .FormatFlags = StringFormatFlags.DirectionVertical Or StringFormatFlags.DirectionRightToLeft}

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo VaporiZed und Rainman,

    vielen Dank für die Hinweise.

    Es hat funktioniert. Nach der Angabe von "StringFormatFlags.DirectionRightToLeft" wird die Anzeige korrekt dargestellt.

    Im Thema Dispose & Co. habe ich zu wenige Erfahrungen. Oft vergesse ich, eine Variable mit Dispose oder Using ungültig zu machen.

    In diesem Eintrag wird vom "ErfinderDesRades" zum Thema Dispose bzw. Using auf ein Buch verwiesen, welches es mittlerweile nicht mehr zu geben scheint. Hat jemand die aktuelle URL zum angegebenen Buch?