我正在使用Entity Framework开发我的第一个Winforms应用程序来访问数据库。我有使用dataset
和tableadapter
的经验。
我有一张带有DataGridView
(DGV)的表单,我想过滤显示的数据。
在之前的应用程序中,为了过滤数据,我在bindingsource中使用了filter属性,因为这允许我将“SQL like”cmds添加到bindingsource。此外,这将让我构建一个通用的过滤器组件,连接到DGV,就像在DevExpress中一样。这是一个要求,因为我正在迁移一个大型应用程序(600个表,400个视图和600个存储过程),我需要建立我的通用库,以提高我的工作效率。
我找了这个问题并找到了一些答案。其中最准确的是here。
正如帖子所说,应该分配给bindingsource.datasource
的组件必须实现IBindingListView
接口。
当我尝试将context.tableName.local
分配给该媒体资源时,可能会调用toArray()
,toBindingList()
,toList()
,而这些资源都没有实现IBindingList
接口
帖子后分辨率表明BindingListView
组件(http://www.sf.net/projects/blw)解决了问题,但我仍然没有意识到如何将过滤器作为字符串传递。也许我遗漏了一些东西,但文档(http://blw.sourceforge.net/)没有帮助。
也许有人可以提供一些指导来解决问题。使用Linq进行过滤首先不是解决方案,因为我将附加到模型/表中的字段,我正在寻找通用的东西。
最后一件事是我希望能够在DGV中添加/修改/删除数据。这并不重要,因为我始终可以将context.tableName.Local.ToBindingList()
设置为bindingsource
。
通过在.where
之前添加.load()
子句来检索过滤数据似乎不是一个解决方案,因为我需要动态过滤并且负载已完成一次,因为我可以在其他帖子中看到(但也许我错了。
动态Linq将是一个解决方案,但在使用通配符和startwith
/ endwith
方法过滤日期时遇到一些问题。
在这样的应用程序中使用EF可以吗?