DataGridView, VirtualMode und AutoSizeRows

14/04/2009 - 12:22 von Michaela Meier | Report spam
Hi,

Ich kàmpfe seit Stunden mit dem DataGridView.
Eigentlich will ich ja was ganz einfaches erreichen: Die Zeilenhöhe
soll an den Inhalt angepaßt werden.

Eine Zeile besteht aus einer Image- und einer Text-Spalte.
Alle Bilder sind erfreulicherweise gleich hoch, aber wenn ich die
Zeilenhöhe mit

RowTemplate.Height = 40

festlege, dann sehen Zeilen, denen noch kein Bild zugeordnet wurde
(und das sind die meisten), einfach scheußlich aus, weil sie für das
bißchen Text viel zu groß sind.

Stelle ich nun

AutoSizeRowsMode = AllCells

ein, dann làuft das verdammte Ding erst einmal alle Eintràge entlang,
um die einzelnen Höhen und die Scrollbar zu berechnen. Bei mehreren
10000 Eintràgen ist das genau _das_, was ich eben mit VirtualMode
verhindern wollte.

AutoSizeRowsMode = DisplayedCells

geht auch nicht, da dann nur die eingangs sichtbaren Zeilen angepaßt
und beim Scrollen nicht weiter berücksichtigt werden.

Kurzum: Wie sag ich's meinem Kin..àh... Computer, was ich von ihm
wünsche? Sprich: vorteilhafte Darstellung und zeitsparende
Ausführung :-)
 

Lesen sie die antworten

#1 Frank Dzaebel
14/04/2009 - 13:21 | Warnen spam
Hallo Michaela,

[DataGridView] Die Zeilenhöhe soll an den
Inhalt angepaßt werden.



Im VirtualMode-Szenario also etwa dieses Beispiel:

[Nutzung grosser Datenmengen beim DataGridView]
http://www.dzaebel.net/DgvVirtual.htm

zum Beispiel folgendes hinzufügen:

private void btnFill_Click(object sender,EventArgs e)
{
// ...
dataGridView1.Columns[0].DefaultCellStyle.WrapMode =
DataGridViewTriState.True;
dataGridView1.Scroll += new ScrollEventHandler(dataGridView1_Scroll);
dataGridView1.AutoResizeRows
(DataGridViewAutoSizeRowsMode.DisplayedCells);
}

void dataGridView1_Scroll(object sender, ScrollEventArgs e)
{
dataGridView1.AutoResizeRows
(DataGridViewAutoSizeRowsMode.DisplayedCells);
}


ciao Frank
Dipl. Inf. Frank Dzaebel [MCP, MVP C#]
http://Dzaebel.NET

Ähnliche fragen