im DataGrid gibt es die Default-Zeilenhöhe: 'PreferredRowHeight'.
Wie realisiert man so etwas im DataGridView? Mit 'RowsDefaultCellStyle' kann
ich keine Zeilenhöhe einstellen (oder doch?). Und alle Zeilenhöhen via
row(n).hight einzustellen dauert sehr lang.
Gruß Jörg
Schau Dir mal die Online-Hilfe zu
DataGridView.AutoResizeRows
und
DataGridView.AutoResizeRow(x)
und für die Spaltenbreiten dann entsprechend
DataGridView.AutoResizeColumns
und
DataGridView.AutoResizeColumn(x)
Mehr zum DataGridView findest Du unter
www.gssg.de -> Visual Basic -> VB.net
Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)
"Peter Götz" wrote:
> > Schau Dir mal die Online-Hilfe zu
>
> DataGridView.AutoResizeRows
> und
> DataGridView.AutoResizeRow(x)
>
> und für die Spaltenbreiten dann entsprechend
>
> DataGridView.AutoResizeColumns
> und
> DataGridView.AutoResizeColumn(x)
hatte ich mir schon angesehen. In meinem Anwendungsfall sehe es "hübscher"
aus, wenn die Zeilenhöhe abweichend von AutoResize noch kleiner eingestellt
werden könnte.
> Mehr zum DataGridView findest Du unter
>
> www.gssg.de -> Visual Basic -> VB.net
da hab ich mir schon einiges draus abgeguckt...
Gruß Jörg
> > DataGridView.AutoResizeRows
> > und
> > DataGridView.AutoResizeRow(x)
> >
> > und für die Spaltenbreiten dann entsprechend
> >
> > DataGridView.AutoResizeColumns
> > und
> > DataGridView.AutoResizeColumn(x)
>
> hatte ich mir schon angesehen. In meinem Anwendungsfall
> sehe es "hübscher" aus, wenn die Zeilenhöhe abweichend
> von AutoResize noch kleiner eingestellt werden könnte.
Bei der Gestaltung einer Programmoberfläche sollte man
vor allem darauf achten, dass der Benutzer die dargebotenen
Daten auch lesen kann. Zu geringe Zeilenabstände in einem
Grid tragen keineswegs dazu bei, den dargestellten Text
komfortabel und entspannt lesen zu können. Als Entwickler
sollte man auch niemals vergessen, dass es viele Leute gibt,
die ohnehin schon eine Sehhilfe brauchen. Es wäre unklug,
denen das Lesen noch schwerer zu machen. Dazu gehört u.a.
auch die Farbgebung der verschiedenen Oberflächenelemente.
Was für einen normalsichtigen Menschen vielleicht ganz
hübsch aussieht, kann für jemanden mit einer Farbsehschwäche
eine Benutzeroberfläche im Extremfall unbedienbar machen.
AutoResizeRows stellt die Zeilenhöhe ohnehin schon so
ein dass z.B. bei Buchstaben mit Unterlängen nur noch 1 Pixel
Abstand bis zur nächsten Trennlinie bleibt. Es wäre also wenig
sinnvoll, die Zeilenhöhe noch weiter zu verringern, da ja sonst
u.U. Buchstaben abgeschnitten würden.
Ansonsten solltest Du Dir auch mal die OH zu
DataGridView.DefaultCellStyle.Padding
ansehen. Damit kann man den Abstand zwischen dem
Text in den Grid-Zellen zum linken, oberen, rechten und
unteren Zellenrand festlegen.
> Bei der Gestaltung einer Programmoberfläche sollte man
> vor allem darauf achten, dass der Benutzer die dargebotenen
> Daten auch lesen kann. .....
:-)) stimmt, ist mehr der Ehrgeiz zu wissen, wie es geht
> AutoResizeRows stellt die Zeilenhöhe ohnehin schon so
> ein dass z.B. bei Buchstaben mit Unterlängen nur noch 1 Pixel
> Abstand bis zur nächsten Trennlinie bleibt.
das kann ich bei mir so nicht bestätigen. Der Abstand zwischen Zellrand und
Text beträgt mehr als 1 Pixel (im übrigen, den Unterstrich mag er gar nicht
annehmen)
> Ansonsten solltest Du Dir auch mal die OH zu
>
> DataGridView.DefaultCellStyle.Padding
>
> ansehen. Damit kann man den Abstand zwischen dem
> Text in den Grid-Zellen zum linken, oberen, rechten und
> unteren Zellenrand festlegen.
ich habe folgendes versucht:
Dim p As New Padding
p.Top = 3
p.Bottom = 3
dgvAgz.DefaultCellStyle.Padding = p
dgvAgz.AutoResizeRows(DataGridViewAutoSizeRowsMode.DisplayedCells)
das ganze hat mit und ohne die letzte Zeile keinen Einfluß auf die
Zeilenhöhe. p.Top=50 bewirkt zum Beispiel, dass in den Zellen gar nichts mehr
zu sehen ist (Ausrichtung vertikal zentriert). Vergrößert man die Zeilehöhe
manuell wird der Zelleninhalt sichtbar
Weißt du sonst noch eine Möglichkeit?
Gruß Jörg
> > Bei der Gestaltung einer Programmoberfläche sollte man
> > vor allem darauf achten, dass der Benutzer die dargebotenen
> > Daten auch lesen kann. .....
>
> :-)) stimmt, ist mehr der Ehrgeiz zu wissen, wie es geht
Wie schon erwähnt, mit DataGridView.DefaultCellStyle.Padding.
> > AutoResizeRows stellt die Zeilenhöhe ohnehin schon so
> > ein dass z.B. bei Buchstaben mit Unterlängen nur noch 1 Pixel
> > Abstand bis zur nächsten Trennlinie bleibt.
>
> das kann ich bei mir so nicht bestätigen. Der Abstand zwischen
Zellrand und Text beträgt mehr als 1 Pixel
Der "untere Rand" eines Textes ist nicht die Unterkante von
Buchstaben wie o, m oder x. Du musst Dir das mal bei
z.B. einem "g" ansehen.
> (im übrigen, den Unterstrich mag er gar nicht annehmen)
Wer mag keinen Unterstrich annehmen?
> > Ansonsten solltest Du Dir auch mal die OH zu
> >
> > DataGridView.DefaultCellStyle.Padding
> >
> > ansehen. Damit kann man den Abstand zwischen dem
> > Text in den Grid-Zellen zum linken, oberen, rechten und
> > unteren Zellenrand festlegen.
>
> ich habe folgendes versucht:
>
> Dim p As New Padding
> p.Top = 3
> p.Bottom = 3
> dgvAgz.DefaultCellStyle.Padding = p
>
> dgvAgz.AutoResizeRows _
> (DataGridViewAutoSizeRowsMode.DisplayedCells)
>
> das ganze hat mit und ohne die letzte Zeile keinen Einfluß
> auf die Zeilenhöhe.
Wenn Du AutoResizeRows auf die "DisplayedCells"
beschränkst, dann wird die Zeilenhöhe der nicht sichtbaren
Zeilen natürlich auch nicht an den Inhalt und das zugehörige
Padding angepasst.
> p.Top=50 bewirkt zum Beispiel, dass in den Zellen gar
> nichts mehr zu sehen ist (Ausrichtung vertikal zentriert).
Na klar, weil hierbei die Zeilenhöhe geringer ist als der
von Dir angegebene Wert Padding.Top und damit der
Text so weit nach unten verschoben ist, dass er innerhalb
der verfügbaren Zeilenhöhe nicht mehr angezeigt werden
kann.
> Vergrößert man die Zeilehöhe
> manuell wird der Zelleninhalt sichtbar
Ja, eben.
Und wenn Du AutoResizeRows nicht nur auf die sichtbaren
Zellen (VisibleCells) beschränkst, dann brauchst Du die
Zeilenhöhe für die gerade nicht sichtbaren Zeilen nicht
mehr manuell anpassen.
>
> Weißt du sonst noch eine Möglichkeit?
Schau Dir mal das nachfolgende Beispiel an.
' /// Code in einer leeren Form1
Public Class Form1
Private WithEvents DGV As DataGridView
Private mDT As DataTable
Private mDV As DataView
Private Sub Form1_Load _
(ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load
DGV = New DataGridView
DGV.Dock = DockStyle.Fill
Me.Controls.Add(DGV)
CreateData()
With DGV
.DefaultCellStyle.Padding = _
New Padding(10, 10, 10, 10)
.DataSource = mDV
End With
' alle Zellen (auch die momentan nicht sichtbaren)
' an den akt. Textinhalt inkl. Padding anpassen.
DGV.AutoResizeColumns()
DGV.AutoResizeRows()
End Sub
Private Sub CreateData()
Dim i As Integer
Dim DR As DataRow
mDT = New DataTable
With mDT
.Columns.Add("ID", GetType(Integer))
.Columns.Add("Monat", GetType(String))
.Columns.Add("Mon", GetType(String))
For i = 1 To 12
DR = .NewRow
DR.Item(0) = i
DR.Item(1) = MonthName(i, False)
DR.Item(2) = MonthName(i, True)
.Rows.Add(DR)
Next
.AcceptChanges()
End With
mDV = New DataView(mDT)
End Sub
End Class
' \\\ E N T E
Den Code einfach in ein leeres Formmodul
kopieren und Programm starten und ....
Das veränderte Padding wird im Grid deutlich sichtbar.
dank dir für dein Beispiel. Der Effekt von Padding läßt sich so sauber
nachvollziehen
Gruß Jörg