我有一个DataGridView,它有一些DataSource。我需要根据用户指定的一些条件过滤DataGridView中的项目。
问题是数据是在一个非常慢的数据库上。对于许多项目,我可以过滤存储在项目本身上的信息(这很快),但有时我需要查询数据库以确定是否应该看到一行。
因此,我以下列方式使用BackGroundWorker:
复制(使用CopyTo)的原因是为了避免从另一个线程访问DataGridViews RowCollection。
所有这一切都很好,但我真的很想知道这是否真的很糟糕。
感谢您的时间。
答案 0 :(得分:1)
我认为你的GUI对于后台工作者来说太紧张了。
一般情况下,我更喜欢使用BindingList<T>
将网格绑定到,并操纵列表而不是通过数据库。但是如果我从数据库中检索到相当大量的数据,那么我可以启用datagridview的“虚拟模式”,并再次使用BindingList<T>
。
希望这有帮助。
EDIT1:当然,您可以直接使用DataTables进行过滤......但是,您可能不应该让后台工作人员参与进来。
EDIT2:我认为BindingList<T>
有机会将视图绑定到模型,而不是直接绑定到数据层,这通常更好,因为分离了表示层的数据层。更重要的是,您可以从模型创建视图模型以将网格绑定到(MVVM模式)。但实际上取决于你的项目。