【问题标题】:Filtering binding source in C#在 C# 中过滤绑定源
【发布时间】:2011-05-09 11:36:48
【问题描述】:

我的代码是这样的

BindingSource bs=new BindingSource();
List<Items> lstItems= ListItems();

bs.DataSource=lstItems;

我将此 bindingsouce 绑定到 gridview。

grd.DaataSource=bs;

然后我将这个原始的 BindingSource 复制到一个单独的 BindngSource

BindingSource filterBs=new BindingSource();

然后我使用过滤条件来绑定源

filterBs.Filter= "ItemCode='1' and cost>'200'";

grd.DataSource=null;

将网格的数据源重新绑定到过滤后的绑定源。

grd.DataSource=filterBs;

但现在它也显示了网格中的所有记录。

【问题讨论】:

    标签: c#


    【解决方案1】:

    然后我复制这个原件 BindingSource 到一个单独的 绑定源

    BindingSource filterBs=new BindingSource();
    

    您不是在复制它,而是在创建一个新的 BindingSource。

    要复制它,您可以执行以下操作:

    BindingSource filterBs = grd.DataSource;
    

    【讨论】:

    • 或者简单地说 --> BindingSoure filterBs = bs;对吗?
    • 即便如此,您还是将引用复制到旧的 BindingSource,而不是创建一个看起来像旧的新的。
    【解决方案2】:

    Binding Source 依赖于底层数据源来提供过滤和排序能力。 List&lt;&gt; 不支持过滤,因此您的BindingSource 不支持过滤。您可以通过在分配了bs.DataSource=lstItems; 后立即查看调试器中的bs.SupportsFiltering 值来确认这是否是您的问题。

    BindingSource.SupportsFiltering Property

    如果列表不是 IBindingListView,SupportsFiltering 总是返回 false。

    我所知道的唯一实现IBindingListView 的类是DataView

    【讨论】:

      【解决方案3】:

      您可能会在使用带有 BindingSource 的 List 并尝试过滤时遇到其他问题,因此我会推荐这个 SO 线程 DataBinding of DataGridView and List<> with BindingSource

      【讨论】:

        猜你喜欢
        • 2015-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-29
        相关资源
        最近更新 更多