| |
VB.NET - FortgeschritteneDatagridview 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? | |
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 | |
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! | |
| 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 |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevPopUp 2.0
Dynamische Kontextmenüs!
Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Weitere Infos
|
|
|
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
|
|