【发布时间】:2013-07-07 10:34:36
【问题描述】:
datagridview 加载非常缓慢。如何优化它?
datagridview 有 4-5 千行。
我必须在几个参数上动态生成一个datagridview。(来自数据库的数据,列数)
我必须从数据库中的表(id,name,contact)垂直生成这样的datagridview..
第 1 列
id
姓名
联系人
现在,column1 旁边可以有任意数量的空列。
目前我正在遵循这种方法。
- 首先添加所有空列。
- 然后在每个 for 循环迭代中添加三行,每个 (id,name,contact) 一行。
-
我正在从数据库中获取数据并将其作为
List <string[]>传递给GenerateRows函数。private void GenerateColumns(int colLen) { dataGridViewGenerate.Rows.Clear(); dataGridViewGenerate.Columns.Clear(); DataGridViewColumn col0 = new DataGridViewTextBoxColumn(); col0.HeaderText = "Employee No. & Name"; dataGridViewGenerate.Columns.Add(col0); for (int i = 0; i < colLen; i++) { DataGridViewColumn col = new DataGridViewTextBoxColumn { HeaderText = (_sTime.AddDays(i)).Day.ToString(CultureInfo.InvariantCulture) + " " + (_sTime.AddDays(i)).ToString("ddd") }; dataGridViewGenerate.Columns.Add(col); } private void GenerateRows(List<string[]> empList) { int len = empList.Count; for (int a = 0; a < len; a++) { string[] arr = empList[a]; //row 1 var row1 = new DataGridViewRow(); row1.Cells.Add(new DataGridViewTextBoxCell { Value = arr[0] }); dataGridViewGenerate.Rows.Add(row1); //row 2 var row2 = new DataGridViewRow(); row2.Cells.Add(new DataGridViewTextBoxCell { Value = arr[1] }); dataGridViewGenerate.Rows.Add(row2); //row3 var row3 = new DataGridViewRow(); row3.Cells.Add(new DataGridViewTextBoxCell { Value = arr[2] }); dataGridViewGenerate.Rows.Add(row3); } }
我正在考虑在 sql 中创建一个过程,该过程将创建一个表并用数据填充它。然后只需将数据源分配给 datagridview。
【问题讨论】:
-
为什么要加载 4-5 千行?用户实际检查 4-5 千行的频率。如果三列并且可以在 1 秒内读取每个单元格,那么读取时间仍然超过 3 小时。一次分页 100 或 1000 行。
-
我必须创建这种类型的数据网格,因为数据输入工作将从这个网格完成。
-
这对于数据输入操作员来说将是一项非常繁琐的工作。
-
真正的 4000 行数据网格视图是您输入数据的唯一选择。而且加载很慢对数据录入操作员来说不是一件乏味的工作吗?
-
只会填写他们手头的报告中的数据。所以我不知道会填写哪些记录。所以我必须展示所有的记录。然后将打印完整的数据网格。甚至是空的牢房。用于遗漏工作的手写数据输入
标签: c# .net database datagridview