DataGridView фильтрация - PullRequest
       19

DataGridView фильтрация

2 голосов
/ 01 октября 2009

Я создаю элемент управления, который должен иметь возможность принимать любой вид списка. По сути следующий код:

void BindData(IList list)
{
    BindingSource bs = new BindindSource();
    bs.DataSource = list;
    this.DataGridView.DataSource = bs;    
}

Теперь у меня есть текстовое поле, которое я хочу использовать для фильтрации данных в моей сетке. Я подумал, что это будет так же просто, как установить свойство bs.Filter, но, очевидно, нет. Bs.SupportsFiltering также возвращает false.

Это проблема со мной, использующим IList? Если да, есть ли другой класс / интерфейс коллекции, который я могу использовать для достижения того же эффекта? (Опять же, я не уверен, какой тип объектов в списке.

Ответы [ 2 ]

4 голосов
/ 01 октября 2009

Не зная, какого типа я получаю, я отфильтровал данные вручную. Вот мой фрагмент кода. Это работает хорошо. Надеюсь, это не будет слишком медленно с большими объемами данных. :: Скрещенные пальцы ::

List<object> filteredData = new List<object>();
foreach (object data in this.DataSource)
{
    foreach (var column in this.Columns)
    {
        var value = data.GetType().GetProperty(column.Field).GetValue(data,null)
                                                            .ToString();
        if (value.Contains(this.ddFind.Text))
        {
            filteredData.Add(data);
            break;
        }
    }
 }

 this.ddGrid.DataSource = filteredData;
0 голосов
/ 01 октября 2009

Интерфейс IBindingListView дополняет возможности привязки данных интерфейса IBindingList, добавляя поддержку фильтрации списка.

Несколько решений для универсальных реализаций IBindingListView можно найти здесь .

...