今天在这篇文章里是为了讨论一个常见DataGridView的数据加载问题及其解决方法,希望对大家有所帮助。正如标题所示,我们通常有一个需要在 DataGridView 控件中显示的大型数据集,并且数据集越大,在控件中加载行所需的时间就越长,并且 UI 可能会挂起。
2万多条也要卡3秒以上,这个大约卡界面一秒不到,接受范围值仅供参考,下面给出部分代码,不过缺省的也就是一些自动生成的代码,主要看实现方法。
示例代码:
Thread threadG;//声明线程
delegate void changetext(DataTable result);
//创建一个委托
public delegate void UpdateD(DataTable result);
public UpdateD updated;
private void dGV_Load(object sender, EventArgs e)
{
ThreadStart threaddgv = new ThreadStart(Getdgv);
threadG = new Thread(threaddgv);
// threadG.IsBackground = true;
threadG.Start();
updated = new UpdateD(UpdateDataTable);
}
public void Getdgv()
{
con1.ConnectionString = "server=.;database=T_JNS;uid=sa;pwd=sa";
con.ConnectionString = "server=.;database=T_JNS;uid=sa;pwd=sa";
con1.Open();
string sql = "select T_Value0 通道1,T_Value1 通道2, T_numNC 内存长度, T_Index 点位,T_dtime 测试时间 from T_SJCJ where T_Value0>0 and T_Value1>0 and T_Value0< 6.4120 and T_Value1<6.402 order by T_Index";
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand(sql, con1);
SqlDataAdapter sdz = new SqlDataAdapter(sql, con1);
DataSet ddz = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
adapter.Fill(dt);
sdz.Fill(ddz);
con1.Close();
// HYSdGV.DataSource = ddz.Tables[0];
System.Data.DataTable table = new DataTable();
System.Data.DataColumn column = new DataColumn();
// column.ColumnName = "序号";
// column.AutoIncrement = true; //是否为自增
// column.AutoIncrementSeed = 1; //开始
// column.AutoIncrementStep = 1;//自增+1
// table.Columns.Add(column);
table.Merge(ddz.Tables[0]);
int i = 0;
// Console.WriteLine("输出取得的数值:");
foreach (DataRow dr in dt.Rows)
{
// Console.WriteLine(dr[0].ToString());
d1[i] = dr[0].ToString();
d2[i] = dr[1].ToString();
s3[i] = dr[2].ToString();
i++;
}
DataTable result = table;
// CalcFinished(result);
Invoke(new changetext(Changetext), new object[] { result });
}
public void Changetext(DataTable result)
{
dataGridView1.DataSource = result;
}
public void UpdateDataTable(DataTable result)
{
dataGridView1.DataSource = result;
}
public void CalcFinished(DataTable result)
{
if (this.dataGridView1.InvokeRequired)
{
while (!this.dataGridView1.IsHandleCreated)
{
if (this.dataGridView1.Disposing || this.dataGridView1.IsDisposed)
{
return;
}
}
changetext c = new changetext(CalcFinished);
this.dataGridView1.Invoke(c, new object[] { result });
// OutPutResult(_grpGetData.Text, _btnGetMeasureData.Text, result);
}
else
{
dataGridView1.DataSource = result;
// dataGridView1.Columns["序号"].DisplayIndex = 0;
}
}
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。