创建支持IBindingListView的实体列表?

时间:2014-08-28 02:51:07

标签: c# winforms data-binding entity-framework-6

我在数据存储库中使用以下代码来返回实体列表。 我想使用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;
    }

2 个答案:

答案 0 :(得分:1)

您可以使用Brian Noyes("Data Binding with Windows Forms 2.0: Programming Smart Client Data Applications with .NET"的作者)

创建的BindingListView

BindingListView .NET library

或实施自己的。如果您有更具体的问题,请询问

答案 1 :(得分:0)

Microsoft提供了一篇很好的文章,用于在传统的BindingList上实现IBindingListView。

Behind the Scenes: Implementing Filtering for Windows Forms Data Binding

关于这个接口的主要问题是filter属性是一个字符串,并且表达式的格式没有标准。因此,您需要知道您将支持(或需要支持)作为字符串表达式。如果您希望“特朗普”表达式在属性“国家/地区”中过滤“US”,而不是“Country = US”,则可以执行此操作。

如果您想要完整复制DataSet表达式支持,这可能会变得非常复杂。