foreach (DaTarow row in data.Rows){ SlowLoadingData slow_stuff = slow_query_results[(int)row["ID"]]; row.BeginEdit(); row[column_one] = slow_stuff.One; row[column_two] = slow_stuff.Two; row[column_three] = slow_stuff.Three; row.EndEdit();}
这是非常慢的,挂起UI线程一分钟或更多,大概是因为每一行都触发重绘.
经过一番研究,我找到了一种方法,使其快速.首先,将DataGrIDVIEw绑定到绑定到Datatable的绑定源,而不是直接到Datatable.然后,当您更改Datatable时,请执行以下 *** 作:
binding_source.SuspendBinding();binding_source.RaiseListChangedEvents = false;// foreach (DaTarow in Data.Rows) ... code abovebinding_source.RaiseListChangedEvents = true;binding_source.ResumeBinding();grID.Refresh();
有一个问题,但它是一个doozy:上面的代码阻止DataGrIDVIEw检测添加到Datatable的新行.添加到表格中的任何新行都不会出现在网格中.如果使用箭头键将当前单元格选择移动到网格的底端,则网格也可能会抛出异常,因为底层数据源具有更多行,但网格尚未创建网格行来显示它们.
所以,我可以看到两个可能的解决方案:
>在更改底层Datatable时,是否有更好的方法来抑制绑定更新?
>有没有一个简单的方法来告诉DataGrIDVIEw来优雅地刷新其网格行集合以匹配底层Datatable行的数量? (注意:我已经尝试调用BindingSource.resetBindings,但如果从Datatable中删除了行,似乎会触发更多的异常!)
以上是内存溢出为你收集整理的c# – 优化DataTable绑定到DataGridView的更新全部内容,希望文章能够帮你解决c# – 优化DataTable绑定到DataGridView的更新所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)