vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
NEU! sevCoolbar 3.0 - Professionelle Toolbars im modernen Design!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Datagridview OwnerDrawn individuelle Höhe 
Autor: msSuper
Datum: 22.02.19 10:56

Hallo,

in einem Datagridview lasse ich mir eine Celle im Cellpainting Ereignis selber zeichnen.

Nun kommt es vor, dass ich beim zeichnen feststelle, dass die Zellenhöhe .d.h. auch Zeilenhöhe nicht ausreichend ist. Kann ich die Zeilenhöhe beim Cellpainting Ereignis irgendwie erhöhen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview OwnerDrawn individuelle Höhe 
Autor: Manfred X
Datum: 23.02.19 06:18

Hallo!

Das DataGridView-Control bietet verschiedenartige Möglichkeiten
der Anpassung der Zellgröße an die formatierte Darstellung des
Zellinhaltes.

Im folgenden ein kleines Windows.Forms-Beispiel dafür,
wie diese Anpassung durch den Code aussehen könnte:
Public Class frmGridRowHeightDemo
 
    Dim dt As New DataTable, bs As New BindingSource
 
    Dim WithEvents dgv As New DataGridView With
        {.Parent = Me, .DataSource = bs,
         .Dock = DockStyle.Left Or DockStyle.Bottom, .Top = 40}
 
    Dim WithEvents btnChangeContent As New Button With
        {.Parent = Me, .Text = "Change Content"}
 
    'Default-Grid-Zeilenhöhe per Code
    Const DefaultRowHeight As Integer = 30 
    Dim GridDefaultFont As New Font("Arial", 10)
 
 
    Private Sub frmGRHD_Load(sender As Object,
                        e As EventArgs) Handles MyBase.Load
 
        Me.Size = New Size(400, 300)
        dgv.Width = 380
 
        'Testdaten                       
        dt.Columns.Add("whatever", GetType(String))
 
        dt.Rows.Add("short entry")
 
        dt.Rows.Add("Its long way to tipperary" & vbCrLf &
        "It's a long way to go.  It's a long way to Tipperary," & 
        vbCrLf & "to the sweetest girl I know!")
 
        dt.Rows.Add("another short entry")
 
        dt.Rows.Add("Sometimes" & vbCrLf & 
        "All I need is the air That I breathe" &
        vbCrLf & "and to love you")
 
        dt.Rows.Add("last short entry")
 
        'Datenbindung herstellen
        bs.DataSource = dt
 
        'Zeilenhöhe im Grid per Code festlegen
        dgv.AutoSizeRowsMode =
        DataGridViewAutoSizeRowsMode.None
        For i As Integer = 0 To dgv.Rows.Count - 1
            dgv.Rows(i).Height = DefaultRowHeight
        Next i
 
        dgv.Font = GridDefaultFont
        dgv.DefaultCellStyle.WrapMode = DataGridViewTriState.True
 
        'Spaltenbreite festlegen
        dgv.Columns(0).Width = 200
    End Sub
 
 
    Private Sub dgv_CellPainting(sender As Object,
        e As DataGridViewCellPaintingEventArgs) Handles dgv.CellPainting
 
        If e.ColumnIndex < 0 Or e.RowIndex < 0 Then Exit Sub
        If e.FormattedValue Is Nothing Then Exit Sub
 
        'Referenz zur Zeile mit der zu zeichnenden Zelle
        Dim row As DataGridViewRow = dgv.Rows(e.RowIndex)
 
        'zu zeichender Text
        Dim txt As String = e.FormattedValue.ToString
 
        'Bestimmung des Platzbedarfs des Textes in der Zelle
        Dim sz As SizeF = e.Graphics.MeasureString(txt, e.CellStyle.Font,
                e.CellBounds.Width - 4, StringFormat.GenericDefault)
 
        'Höhe bei Bedarf anpassen
        If sz.Height + 4 > e.CellBounds.Height Then
            row.Height = CInt(sz.Height + 4)
        ElseIf sz.Height + 4 < DefaultRowHeight Then
            'ggf. Zurücksetzen der Zeilenhöhe
            row.Height = DefaultRowHeight
        End If
 
    End Sub
End Class
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Datagridview OwnerDrawn individuelle Höhe 
Autor: msSuper
Datum: 25.02.19 07:46

Hallo Manfred X,

vielen Dank für diesen tollen Tipp.
Ich habe stundenlang gesucht und nichts gefunden.

Im Nachhinein erscheint das dann so einfach. Der Schlüssel war dann so einfach über e.rowIndex die Row zu erhalten und dort die .Height zu übergeben

Was für ein mächtiges und flexibles DatagridView!!!

Vielen herzlichen Dank,
Du bist mein Held des Tages!
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel