我创建了一个需要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();
}
答案 0 :(得分:0)
您真的应该只看到20或30行数据就不会遇到任何性能问题,但是在DataGridView
中处理该问题的方法是实现virtual mode。您将DGV的VirtualMode
设置为true,并实现一些事件处理程序(CellValueNeeded
,也许还有其他事件处理程序)来获取特定单元格的数据。您的数据存储在某些私有结构中,但未绑定到DGV。
请注意,启用虚拟模式会禁用DGV的某些其他功能。值得注意的是,无法使用排序和自动调整列宽,因此,如果需要这些功能,则需要编写自己的实现。
您可以使用DataTable
来存储数据,通过SQL查询可能就足够了。我发现使用DataRow[]
比填满整个表格要快。