Привязка списка к списку привязок, фильтрация по свойству элемента

Я работаю над приложением 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";
    }
}

Я искал в Интернете, но не нашел ничего похожего на то, что я пытаюсь сделать. Любые предложения или альтернативные методы очень ценятся. Спасибо.


person DaveH    schedule 11.02.2013    source источник
comment
эти данные, которые связываются, вы выполняете какой-то запрос ..? если да, то измените запрос и добавьте пункт Where WHERE IsPopulated = true   -  person MethodMan    schedule 12.02.2013
comment
@DJ KRAZE - Нет, в моем class DataBuilder я создаю несколько TabeleSets, каждый из которых содержит разные данные через DataTables. У меня есть другой код, который заполняет таблицы данных с помощью запросов к базе данных, и когда запрос завершен, я обновляю свойство IsPopulated для TableSet   -  person DaveH    schedule 12.02.2013


Ответы (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();
person Mash    schedule 11.02.2013
comment
Я думаю, вы имели в виду someTableList.Add(TS) - person DaveH; 09.04.2013