在datagridview中加载大量数据的性能问题

时间:2019-02-01 18:14:59

标签: c#

我创建了一个需要datagridview才能显示数据的应用程序,因此我创建了一种使用datagridview将数据从MySQL数据库显示到datatable的方法。  但是,当我启动该应用程序时,我注意到datagridview滞后于左右滚动,即使我的datagridview大约有20-30条记录。我的问题是,我的客户端将加载大约10k的数据,我该如何提高其性能。我尝试过的几件事是我启用了双缓冲区,但仍然没有发现任何增强。

到目前为止,我的代码:

void DisplayTable()
    {
        var connection = Connection.prevzemiKonekcija();

        var adapter1 = new MySqlDataAdapter();
        var sqlSelectAll = "SELECT * from prodavnica.artikli";
        adapter1.SelectCommand = new MySqlCommand(sqlSelectAll, connection);
        var table = new DataTable();
        adapter1.Fill(table);

        var bajndsors = new BindingSource();
        bajndsors.DataSource = table;
        dataGridView1.DataSource = bajndsors;


        dataGridView1.RowsDefaultCellStyle.BackColor = Color.Linen;
        dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Cornsilk;


        dataGridView1.Columns[0].HeaderText = "Ред.бр";
        dataGridView1.Columns[1].HeaderText = "Шифра";
        dataGridView1.Columns[2].HeaderText = "Назив";
        dataGridView1.Columns[3].HeaderText = "Набавна цен.";
        dataGridView1.Columns[4].HeaderText = "Продажна цен.";
        dataGridView1.Columns[5].HeaderText = "Кол.";
        dataGridView1.Columns[6].HeaderText = "Данок";
        dataGridView1.Columns[7].HeaderText = "Опис";
        dataGridView1.Columns[8].HeaderText = "Долг опис";
        dataGridView1.Columns[9].Visible = false;
        dataGridView1.Columns[10].HeaderText = "Ед.мера";
        dataGridView1.Columns[11].HeaderText = "Профит";
        dataGridView1.Columns[12].HeaderText = "Производител";

        this.dataGridView1.VirtualMode = true;
        connection.Close();
    }

1 个答案:

答案 0 :(得分:0)

您真的应该只看到20或30行数据就不会遇到任何性能问题,但是在DataGridView中处理该问题的方法是实现virtual mode。您将DGV的VirtualMode设置为true,并实现一些事件处理程序(CellValueNeeded,也许还有其他事件处理程序)来获取特定单元格的数据。您的数据存储在某些私有结构中,但未绑定到DGV。

请注意,启用虚拟模式会禁用DGV的某些其他功能。值得注意的是,无法使用排序和自动调整列宽,因此,如果需要这些功能,则需要编写自己的实现。

您可以使用DataTable来存储数据,通过SQL查询可能就足够了。我发现使用DataRow[]比填满整个表格要快。