DataGridView Höhe automatisch an Anzahl der Zeilen anpassen *gelöst*

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von HerrFrie.

    DataGridView Höhe automatisch an Anzahl der Zeilen anpassen *gelöst*

    :thumbsup: Hallo Leute,

    ist es möglich die Höhe eines DataGridView von der Anzahl der enthaltenen Zeilen abhängig zu machen ?

    Ich benutze ein DataGridView, welches an ein DataView gebunden ist, um ein Filter-Ergebnis anzeigen zu lassen.
    Da die gefilterten Zeilen so zwischen 2 und 30 sein können, würde ich die Höhe des DataGridView gerne dem anpassen.
    Dadurch hätte ich dann kein nicht benutzes graues Feld und so.

    Die DOCK Eigenschaft hilft mir hier nicht weiter.

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

    Das sollte sich einfach lösen lassen mit folgendem Source:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded
    2. With DataGridView1
    3. .Height = .Rows.Count * .Rows(e.RowIndex).Height
    4. End With
    5. End Sub


    Oder wenn die Zeilen aus irgend einem Grund verschiedene Höhen haben:

    VB.NET-Quellcode

    1. Private Sub DataGridView1_RowsAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewRowsAddedEventArgs) Handles DataGridView1.RowsAdded
    2. With DataGridView1
    3. .Height = 0
    4. For Each Row As DataGridViewRow In .Rows
    5. .Height += Row.Height
    6. Next
    7. End With
    8. End Sub


    Ist nicht getestet, sollte aber wasserdicht sein :).
    MfG
    Hi,

    VB.NET-Quellcode

    1. .Height = .Rows.Count * .Rows(e.RowIndex).Height


    die Höhe läßt sich so nicht auslesen, da bekomme ich eine Fehlermeldung. Im Handbetrieb kann ich auch kein .height wählen.
    Es hilft nur eine fixe Zahl einzugeben und das bringt keine reproduzierbaren optischen Erfolge.

    Mein DGV wird über diesen Code verändert :

    VB.NET-Quellcode

    1. Private Sub NumericUpDown1_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged
    2. ' Jubilare für Vereinszugehörigkeit für die Jahre 25, 40, 50, 60, 70, 80, 90
    3. ' Die Änderung der Jahreszahl wird umgesetzt
    4. Dim A1 As Integer = 25 + DateAndTime.Year(Now) - NumericUpDown1.Value
    5. Dim A2 As Integer = 40 + DateAndTime.Year(Now) - NumericUpDown1.Value
    6. Dim A3 As Integer = 50 + DateAndTime.Year(Now) - NumericUpDown1.Value
    7. Dim A4 As Integer = 60 + DateAndTime.Year(Now) - NumericUpDown1.Value
    8. Dim A5 As Integer = 70 + DateAndTime.Year(Now) - NumericUpDown1.Value
    9. Dim A6 As Integer = 80 + DateAndTime.Year(Now) - NumericUpDown1.Value
    10. Dim A7 As Integer = 90 + DateAndTime.Year(Now) - NumericUpDown1.Value
    11. JubilareVerein_DataView.RowFilter = "imVerein = " & A1 & " OR imVerein = " & A2 & " OR imVerein = " & A3 & " OR imVerein = " & A4 & " OR imVerein = " & A5 & " OR imVerein = " & A6 & " OR imVerein = " & A7 & ""
    12. End Sub


    Ich habe eine waagerechten Scrollbalken durch breitere Spalten etc., der mir halt bei der Anzeige von 6 Spalten ziemlich tief hängt. Das wollte ich eigentlich damit umgehen.
    Ich habs doch gelöst bekommen.

    VB.NET-Quellcode

    1. Jubilare_DataGridView.Height = Jubilare_DataGridView.ColumnHeadersHeight + (Jubilare_DataView.Count + 1) * (Jubilare_DataGridView.RowTemplate.Height)


    Die Gesamthöhe des DataGridView (DataGridView.Height) ergibt sich aus der Überschrift(DataGridView.ColumnHeadersHeight) und
    der Anzahl der Spalten+1((DataView.Count + 1) * (DataGridView.RowTemplate.Height)).

    Da ich die Ansicht durch die Filterung im DataView flexibel halte, zähle ich die Einträge des DataView.
    Dadurch, dass ich eine Zeile mehr benutze habe ich zwar eine leere graue Zeile am Ende, dafür aber keinen vertikalen Scrollbalken.
    Wer möchte, kann die zusätzliche Zeile also auf Kosten eines zusätzlich vertikalen Scrollbalkens weg lassen.

    :thumbsup: