C# 在datagridview中添加新行后,立即显示它
我有一个datagridview。当我以编程方式添加新行时,它应该立即出现在datagridview上,而不是等待完成所有的行 我正在使用下面的解决方案C# 在datagridview中添加新行后,立即显示它,c#,sql,winforms,performance,datagridview,C#,Sql,Winforms,Performance,Datagridview,我有一个datagridview。当我以编程方式添加新行时,它应该立即出现在datagridview上,而不是等待完成所有的行 我正在使用下面的解决方案 ... adapter.Fill(ds); foreach (DataColumn dc in ds.Tables[0].Columns) { datagridView1.Columns.Add(dc.ColumnName, dc.ColumnName); } foreach (DataRow row in ds.Tables[0].R
...
adapter.Fill(ds);
foreach (DataColumn dc in ds.Tables[0].Columns)
{
datagridView1.Columns.Add(dc.ColumnName, dc.ColumnName);
}
foreach (DataRow row in ds.Tables[0].Rows)
{
datagridView1.Rows.Add(row.ItemArray);
}
...
在这个解决方案中,我必须等到ds.Tables[0].行
完成,然后datagridview显示这些行
我要求提供一个解决方案或建议,在该解决方案或建议中,我可以看到在datagridview上插入实时行,这与执行查询后在SQL Server上的结果类似。没有立即添加行的原因是UI线程正在忙于执行循环,循环尚未完成时,它没有机会重新绘制UI 解决方案:
应用程序.DoEvents()
“magic”调用李>
没有立即添加行的原因是UI线程正在忙于执行循环,而在循环尚未完成时,它没有机会重新绘制UI 解决方案:
应用程序.DoEvents()
“magic”调用李>
还是只使用数据绑定
private DataTable Dt = new DataTable();
dataGridView1.DataSource = Dt;
//do what ever
DataRow dataRow = Dt.NewRow();
//add data here to data row
Dt.Rows.Add(dataRow);
虽然这不会解决GUI锁定的问题,
我建议阅读。还是只使用数据绑定
private DataTable Dt = new DataTable();
dataGridView1.DataSource = Dt;
//do what ever
DataRow dataRow = Dt.NewRow();
//add data here to data row
Dt.Rows.Add(dataRow);
虽然这不会解决GUI锁定的问题,
我建议您阅读。您是否意识到这会降低所有记录的呈现速度?如果您想分块加载,这很好,但在每一行之后都是多余的。记录在案,几年前我有一个DataGridView,我将30k条记录加载到其中(大约20列),时间不到一分钟。如果我再做一次那个项目,我很可能会一次把它分解成1k,然后继续加载,直到我拥有了所有的东西。你知道这会减慢所有记录的呈现吗?如果您想分块加载,这很好,但在每一行之后都是多余的。记录在案,几年前我有一个DataGridView,我将30k条记录加载到其中(大约20列),时间不到一分钟。如果我再次处理该项目,我会一次将其分解为1k,并继续加载,直到我拥有所有内容。这也修复了在将行添加到DatagridView后立即选择新行的问题。ArgumentOutOfBoundException,因为未立即创建行。这也修复了在将行添加到DatagridView之后选择新行的问题。ArgumentOutOfBoundException,因为未立即创建行。选择它会给你带来很多好处。