[英]DataGridView + DataTable, best way of handling huge lists?
我有一个DataTable,它将包含大约两千行,每行有大约20个字段。
此外,单元格中的值将实时更改。 另外,某些行在运行时将被删除,而某些行将被添加。
我面临的第一个问题是,当我打开应用程序并调用DataGrid.DataSource =。时。DataGrid首先不显示数据,我必须最小化该应用程序,然后再将其重新打开以显示数据,为什么会这样?
第二个问题是每行将从单独的线程更新。 我不断收到“索引损坏”异常,然后发现无法从单独的线程更新dataTable,因此我创建了一个具有所有单元格的类,创建了List,并使线程直接更新了类数据,然后另一个线程更新了dataTable看起来不错,但是有更好的方法吗?
基本上,我需要一个DataGrid,它支持数千行(将由线程而不是用户实时更新/删除/添加)。 做到这一点的最佳方法是什么?
谢谢!
摆脱数据表是我的第一个想法,这是您真正需要的唯一时间,如果您想将所有线程(或其他任何事情)所做的所有更改应用于后端。
您已取消此清单课程。 如果将其实现到Implement IList,则可以将其绑定为DataTable
一旦像使用您的类而不是使用DataTable一样进行控制,就可以查看BindingNotifications的时间和方式。
UI不更新的第一个问题可以(可能)通过使用myDataGridView.Update()
更新DataGridView
来解决,这将仅刷新/更新此控件,并且比刷新整个表单更有效(我假设您正在使用WinForms)。
第二个问题的解决方案取决于您采用的是哪种线程(您未说明)。 假设您使用的是TPL,则可以使用TaskSheduler
将数据插入到DataGridView
中,以便从在单独线程上运行的方法中
Task.Factory.StartNew(() =>
{
source1.DataSource = dtAll;
dataGridView1.DataSource = source1;
}, CancellationToken.None, TaskCreationOptions.None, _uiScheduler);
通过UI线程从以下位置定义TaskScheduler
位置
TaskScheduler _uiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
并传递给您异步方法。 我希望这有帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.