【问题标题】:Binding Listbox to bindinglist, filter on item property将列表框绑定到绑定列表,过滤项目属性
【发布时间】:2013-01-27 00:37:10
【问题描述】:

我正在开发一个 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";
    }
}

我一直在网上寻找,但没有发现任何与我正在尝试做的类似的事情。非常感谢任何建议或替代方法。谢谢

【问题讨论】:

  • 这个被绑定的数据你在运行某种查询吗..?如果是这样,那么更改查询并添加Where 子句WHERE IsPopulated = true
  • @DJ KRAZE - 在我的class DataBuilder 中没有我实例化了几个TabeleSets,每个TabeleSets 通过DataTables 保存不同的数据。我有其他代码通过查询数据库填充 DataTables,当查询完成时,我更新 TableSetIsPopulated 属性

标签: c# winforms data-binding listbox bindinglist


【解决方案1】:

试试这个:在您的 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();

【讨论】:

  • 我想你的意思是 someTableList.Add(TS)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 2012-10-08
  • 1970-01-01
  • 2020-12-01
相关资源
最近更新 更多