什么是更新datagridview的最佳方法?

3
我在应用程序中使用以下代码使用计时器更新 DataGridView。计时器每秒运行一次,会使屏幕闪烁。如何才能避免屏幕闪烁?或者还有另外一种更新 DataGridView 的方法吗?
        SqlConnection mySqlConnection = new SqlConnection(SQLCONN);
        mySqlConnection.Open();

        SqlDataAdapter addapter = new SqlDataAdapter();
        DataTable dt = new DataTable("SSReportAmalgamate");
        SqlCommand cmd = mySqlConnection.CreateCommand();

        cmd.CommandText = "EXEC App_GetDATA " + "@acc" + "," + "@selecttype";
        cmd.Parameters.Add("@acc", SqlDbType.Char).Value = acc;
        cmd.Parameters.Add("@selecttype", SqlDbType.Char).Value = type;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandType = CommandType.Text;
        cmd.Connection = mySqlConnection;
        addapter.SelectCommand = cmd;

        addapter.Fill(dt);
        dataGridView1.DataSource = dt;

        mySqlConnection.Close();
3个回答

1
问题在于,即使数据没有更改,您也会更新表单。相反,尝试从 SQL Server 听取事件,例如 使用 SqlDependency,当有新数据时(当然,如果您的数据不经常更改)。

我无法使用SqlDependency,因为应用程序没有足够的数据库权限来执行“CREATE”。请问还有其他方法吗? - Jay
我在事件(dataGridView_CellPainting)中添加了新的功能,通过循环每一行检查每个单元格的值并更改单元格的前景色来解决问题。感谢您的答案。 :) - Jay
创建什么?你所需要的就是启用服务代理(向你的数据库管理员询问ALTER DATABASE yourDB SET ENABLE_BROKER)。祝你好运! - alex555

0

如果您正在使用WinForms,一种可行的方法是将控件设置为双缓冲

control.DoubleBuffered = true;

或者您可以在设计视图中通过属性窗口设置;我记得表单本身也有这个属性。

还有这个...

[...] 可以减少或消除由于逐步重绘所导致的闪烁。缓冲图形需要将更新的图形数据先写入缓冲区。然后,图形缓冲区中的数据会快速写入显示表面内存。相对较快地切换显示的图形内存通常会减少可能发生的闪烁。


仍然一样。实际上,在运行应用程序时,它并没有闪烁整个屏幕,而只是datagridview部分,这是由于定时器设置为每秒运行。在datagridview中,我根据数据值更改单元格颜色。因此,一旦datagridview绑定,它就会将原始单元格颜色更改为新的单元格颜色。 - Jay

0
使用扩展方法为datagrid添加双缓冲,然后在表单中将其设置为true。
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);
    }
}

将上述类添加到您的项目中,并为数据网格设置双缓冲属性,如下所示。
dataGridView1.DoubleBuffered(true);

参考资料:http://bitmatic.com/c/fixing-a-slow-scrolling-datagridview


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接