将Listbox绑定到bindinglist,过滤item属性

时间:2013-02-11 20:19:16

标签: c# winforms data-binding listbox bindinglist

我正在使用Winforms应用程序,并且我有一个绑定到达列表框的对象的绑定列表。我得到了这个,但我接下来要做的只是显示特定属性为真的项目。

所以我有一个带有绑定列表的类

class DataBuilder
{    
    public BindingList<TableSet> allTableSets = new BindingList<TableSet>();
}

具有一些属性的类TableSet

class TableSet
{
    public string TableSetName {get; set;}
    public bool IsPopulated {get; set;}
}

现在在我的表单上,我想将列表框绑定到allTableSets,但只显示IsPopulated == true

的项目

到目前为止,我在表单上显示的内容只显示了allTableSets列表中的所有项目

public partial class MainForm : Form
{
    DataBuilder dataBuilder = new DataBuilder();
    {
        this.populatedTableSetsListBox.DataSource = dataBuilder.allTableSets;
        this.populatedTableSetsListBox.DisplayMember = "TableSetName";
    }
}

我一直在寻找网络,但没有发现任何类似于我想要做的事情。非常感谢任何建议或替代方法。谢谢

1 个答案:

答案 0 :(得分:0)

试试这个:在DataBuilder课程中,有一个功能可根据您的过滤条件返回项目的子集。

例如,在DataBuilder课程中:

    public BindingList<TableSet> someTableSets()
    {
        BindingList<TableSet> someTableList = new BindingList<TableSet>();
        foreach (TableSet TS in allTableSets)
            if (TS.IsPopulated == true)
                someTableList.Add(TS);
        return someTableList;
    }

然后,在MainForm中,不要将DataSource设置为allTableSets,而是将其设置为等于someTableSets()函数的结果:

    this.populatedTableSetsListBox.DataSource = dataBuilder.someTableSets();