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-ID: 422597

Url: https://administrator.de/forum/dotnet-datagridview-hinzufuegen-von-zeilen-langsam-422597.html

Ausgedruckt am: 07.04.2025 um 11:04 Uhr

emeriks
emeriks 27.02.2019 aktualisiert um 14:56:17 Uhr
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.