我有一個DataTable,完全填充,這是我想設置一個DataGridView:慢設置DataGridView的數據源到數據表在C#中
gdv.DataSource = dt;
然而,這是痛苦的緩慢。 DataTable的填充非常快,但上面的這一行很長時間。有什麼方法可以加速或在另一個線程中執行它?
此後沒有交互作用。只是上面的簡單陳述!
謝謝。
我有一個DataTable,完全填充,這是我想設置一個DataGridView:慢設置DataGridView的數據源到數據表在C#中
gdv.DataSource = dt;
然而,這是痛苦的緩慢。 DataTable的填充非常快,但上面的這一行很長時間。有什麼方法可以加速或在另一個線程中執行它?
此後沒有交互作用。只是上面的簡單陳述!
謝謝。
檢查格式選項,尤其是Fill
相關屬性。調整所有行的列寬需要進行大量計算。
填充相關的意思是什麼?我無法在任何地方看到。任何特別的? – Mark 2011-01-11 17:38:09
autosizecolumnmode和單個列樣式 – 2011-01-11 17:46:04
這是一個修復。問題在於框架在新數據源中每行重新調整一次列的大小(爲什麼?)。當然,它每次都需要遍歷所有行,導致O(n^2)操作。所以很遺憾,看起來您必須在設置數據源之前關閉自動調整大小,然後手動調用AutoResizeColumns方法。
grdChanges.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
grdChanges.DataSource = schemaChangesSpreadsheet.Changes
grdChanges.AutoResizeColumns(DataGridViewAutoSizeColumnMode.AllCells)
原來,微軟告訴你這樣做的一篇文章「縮放Windows最佳實踐窗體DataGridView控制」,如果你有一個具有相同繁重的計算問題,不同的UI設置這可能會幫助你。
有了這個代碼,我有很好的效果:
dtgvPlanificado.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
dtgvPlanificado.ColumnHeadersVisible = False
dtgvPlanificado.DataSource = DS.Tables("LV1")
dtgvPlanificado.ColumnHeadersVisible = True
dtgvPlanificado.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
AutoSizeColumnsMode是真正的瓶頸...... 11秒15成爲毫秒。
這是我一直在尋找:
<System.Runtime.CompilerServices.Extension()>
Public Sub BeginLoadData(dataGridView As DataGridView)
dataGridView.Tag = dataGridView.AutoSizeColumnsMode
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
End Sub
<System.Runtime.CompilerServices.Extension()>
Public Sub EndLoadData(dataGridView As DataGridView)
dataGridView.AutoSizeColumnsMode = CType(dataGridView.Tag, DataGridViewAutoSizeColumnsMode)
End Sub
爲我改變RowHeadersWidthSizeMode
來自:
DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
到:
DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;
是非常有益的。
當您使用相同的代碼行,但只有10條記錄的dt時會發生什麼 - 快或慢? – 2011-01-11 17:20:33
數據表中有多少條記錄,數值有多大(是否有任何大的文本字段?) – RQDQ 2011-01-11 17:20:35
非常快,非常小的表(10x10),在原始表中最多有400行,也許100列(最大)。最長的字符串字段約爲10個字符。 – Mark 2011-01-11 17:34:34