我有一个完全填充的DataTable,我想将其设置为DatagridView:
gdv.DataSource = dt;
然而,这非常缓慢。 DataTable的填充速度非常快,但上面这一行需要很长时间。有没有办法加快速度或在另一个线程中执行它?
此后没有互动。只是上面简单的陈述!
感谢。
答案 0 :(得分:8)
检查格式选项,尤其是Fill
相关属性。调整所有行的列宽需要大量计算。
答案 1 :(得分:5)
这是一个修复。问题是框架在新数据源中每行重新调整一次列的大小(为什么??)。当然,每次都需要遍历所有行,从而产生O(n ^ 2)运算。很遗憾看起来你必须在设置数据源之前关闭自动调整大小,然后手动调用AutoResizeColumns方法。
grdChanges.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
grdChanges.DataSource = schemaChangesSpreadsheet.Changes
grdChanges.AutoResizeColumns(DataGridViewAutoSizeColumnMode.AllCells)
原来,Microsoft告诉您在文章“扩展Windows窗体DataGridView控件的最佳实践”中这样做,如果您有一个具有相同繁重计算问题的不同UI设置,这可能对您有所帮助。
答案 2 :(得分:1)
使用此代码我有很好的结果:
dtgvPlanificado.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
dtgvPlanificado.ColumnHeadersVisible = False
dtgvPlanificado.DataSource = DS.Tables("LV1")
dtgvPlanificado.ColumnHeadersVisible = True
dtgvPlanificado.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
答案 3 :(得分:0)
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
答案 4 :(得分:0)
我改变了RowHeadersWidthSizeMode
:
DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;
为:
DataGridViewRowHeadersWidthSizeMode.AutoSizeToDisplayedHeaders;
非常有帮助。
答案 5 :(得分:0)
别忘了自动调整行也可以发挥作用。这对我来说很好。将数据绑定从〜1秒更改为0.1秒。我希望一切都那么容易,以使速度提高10倍!
dgvProperties.DataSource = Nothing
dgvProperties.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None
dgvProperties.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None
dgvProperties.DataSource = datatable
dgvProperties.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
dgvProperties.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells