emeriks
Goto Top

DotNet - DatagridView - Hinzufügen von Zeilen langsam

Hi,
ich habe hier ein DataGridView ohne Datenanbindung. Ich fülle das Teil manuell.
Die Tabellen können auch schon mal richtig groß werden. 700 Zeilen mit je 400 Spalten kann vorkommen.

Das Erzeugen und Hinzufügen der Spalten geht normal schnell.
Das Erzeugen der Zeilen auch. (eine List(Of DataGridViewRow) )
Nur wenn ich die Zeilen mit AddRange hinzufüge, dann dauert das für ca. 600 Zeilen ca. 60 Sekunden.
.Rows.AddRange(NewRows)

Das DGW wird zu dieser Zeit noch gar nicht dargestellt (keiner Form oder sonstigem Control untergeordnet). Damit können wir Verzögerungen durch das Zeichnen der Zeilen schon mal ausschließen.
Ich habe es auch schon mit VirtualMode und CellValueNeeded versucht, es ändert nichts.

Hat jemand ne Idee, wie ich das Hinzufügen der fertigen Zeilen beschleunigen kann?

E.

Content-Key: 422597

Url: https://administrator.de/contentid/422597

Printed on: April 25, 2024 at 10:04 o'clock

Member: emeriks
emeriks Feb 27, 2019 updated at 13:56:17 (UTC)
Goto Top
Die Lösung kann so einfach sein ...
Ich hatte für das DGW eingestellt:
.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader
.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
Das hat das Hinzufügen ausgebremst.
Statt dessen jetzt so:
.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None

---> hier die Inhalte hinzufügen (Spalten und Zeilen)

.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader
.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None

Jetzt schafft er die 600 Zeilen in 10 Sekunden. Damit kann ich leben.