我在数据存储库中使用以下代码来返回实体列表。 我想使用winforms bindingsource绑定到列表,然后能够支持和过滤bindingsource
我目前使用类似
的内容mybindingSource.datasource = repository.GetList(p => p.Id > 0 && p.Archived == false, x => x.Organisation);
然而mybindingSource.SupportsFilter返回false。
存储库功能是
public virtual IList<T> GetList(Func<T, bool> where, params Expression<Func<T, object>>[] navigationProperties)
{
List<T> list;
IQueryable<T> dbQuery = ((DbContext)this.context).Set<T>();
//Apply eager loading
foreach (var navigationProperty in navigationProperties)
{
dbQuery = dbQuery.Include(navigationProperty);
}
list = dbQuery.AsNoTracking().Where(where).ToList();
return list;
}
答案 0 :(得分:1)
您可以使用Brian Noyes("Data Binding with Windows Forms 2.0: Programming Smart Client Data Applications with .NET"的作者)
创建的BindingListView
或
或实施自己的。如果您有更具体的问题,请询问
答案 1 :(得分:0)
Microsoft提供了一篇很好的文章,用于在传统的BindingList上实现IBindingListView。
Behind the Scenes: Implementing Filtering for Windows Forms Data Binding
关于这个接口的主要问题是filter属性是一个字符串,并且表达式的格式没有标准。因此,您需要知道您将支持(或需要支持)作为字符串表达式。如果您希望“特朗普”表达式在属性“国家/地区”中过滤“US”,而不是“Country = US”,则可以执行此操作。
如果您想要完整复制DataSet表达式支持,这可能会变得非常复杂。