我正在编写一个应用程序,我从数据库加载两个DataGridViews。我已成功使用dataAdapter.Fill(DataSet)完成此操作,但我遇到的问题是来自数据库的数据有数万条记录。它第一次运行时非常慢(太慢,大约7分钟)。下次运行时间更合理(约35秒)。所以我想我会尝试另一种方法:用数据加载一个二维arraylists然后将其传递给datagridviews。最初我认为这将是一个快速测试,看看时间收益,如果有的话,但事实证明它比我想象的更难。这就是我所拥有的:
while(dr.Read())
{
for (int l = 0; b && l <= dr.FieldCount-1; l++)
{
DataGridViewColumn column = new DataGridViewColumn();
column.CellTemplate = cellTemplate;
column.FillWeight = 1;
column.Name = dr.GetName(l);
dgv.Columns.Add(column);
}
b = false;
for (int i = 0; i <= dr.FieldCount - 1; i++ )
{
row.Add(dr.GetValue(i));
}
table.Add(row);
row = new System.Collections.ArrayList();
}
dgv.DataSource = table;
注意,我会创建一个类来构建数据(每列的数据成员,但列可以更改),因此是arrayList的想法。 datagridview最终具有正确的列,具有正确的名称和正确的数字或行,但是行都是空白的,并且它添加了与arrayList的结构相关的其他列。我究竟做错了什么?有没有更好的办法?任何帮助/反馈将不胜感激! : - )
谢谢,
本
答案 0 :(得分:0)
好的......我弄清楚了......很多;-)我放弃了Arraylist的想法,只是将值直接添加到dgv中。这就是我所做的,如果有人关心: - )
...
while(dr.Read())
{
for (int l = 0; b && l <= dr.FieldCount-1; l++)
{
DataGridViewColumn column = new DataGridViewColumn();
column.CellTemplate = cellTemplate;
column.FillWeight = 1;
column.Name = dr.GetName(l);
dgv.Columns.Add(column);
}
b = false;
dgvRow = new DataGridViewRow();
for (int i = 0; i <= dr.FieldCount - 1; i++ )
{
dgvCell = new DataGridViewTextBoxCell();
dgvCell.Value = dr.GetValue(i).ToString();
dgvRow.Cells.Add(dgvCell);
}
dgv.Rows.Add(dgvRow);
}
...
这引出了我的下一个问题:Best way to fill DataGridView with large amount of data