c#填充datagridview非常慢

use*_*916 13 c# datagridview

我正在从数据表中填充datagridview.

在填充列和行时,我也同时对其进行格式化,这会导致datagridview加载速度非常慢,是否有解决此问题的方法?

小智 10

除了照顾之外AutoSizeColumnsMode,还要确保各列的AutoSizeMode属性也设置为除了所有单元格以外的其他列.

我也发现有必要使用

SendMessage(dg.Handle, WM_SETREDRAW, false, 0); // before

// updates to datagridview here...

SendMessage(dg.Handle, WM_SETREDRAW, true, 0); // after
Run Code Online (Sandbox Code Playgroud)

  • 在刷新数据源之前将AutoSizeColumnsMode更改为None,然后在设置数据源之后将其设置回All将我的加载时间从几分钟减少到不到一秒. (2认同)

小智 8

这将是datagridview快速java jtable :)

public static class ExtensionMethods
{
    public static void DoubleBuffered(this DataGridView dgv, bool setting)
    {
        Type dgvType = dgv.GetType();
        PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
            BindingFlags.Instance | BindingFlags.NonPublic);
        pi.SetValue(dgv, setting, null);
    }
}

ExtensionMethods.DoubleBuffered(dataGridView1, true);
Run Code Online (Sandbox Code Playgroud)


小智 7

我花了大约2-4分钟加载1-2k行.我更改了自动调整大小属性,现在它已经下降到几秒钟,大概是10-20.我在行创建循环之前运行此命令以确保它获得所有列.

foreach (DataGridViewColumn c in thisGrid.Columns)
{
    c.AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以检查DataGridView的属性-AutoSizeColumnsMode我发现,如果将模式从AllCells更改为DisplayedCells,性能会有所不同。我希望这能帮到您。


Fel*_*ano 3

当您使用数据网格视图显示数据库中的数据时,您应该始终考虑使用某种策略来限制结果集并仅在用户真正看到记录时才显示记录。这有时称为虚拟模式或数据分页。我有一个wpf 策略的示例,但 winforms 也有一些策略。也看看这个问题:与 MS Access Grid 相比,Winform DataGridview 非常慢,我认为也与您的问题有关。