Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Как отфильтровать строки в DataGridView?


Автор: Glen 23.3.2016, 23:22
У меня есть .Net приложение с WinForms. В нём есть объект System.Windows.Forms.DataGridView с datasource  в виде BindingSource -> BindingList

Как мне [программно] отфильтровать строки – то есть сделать так чтобы DataGridView отображал только часть строк, имеющихся в том BindingList-е?

Вот как примерно выглядит код:

i
Код

nterface IObj
    {
        int Code { get; set; }
    }

    ... 

    BindingList<IObj> list = <[U]мне дают этот список из другого модуля программы[/U]>;
    BindingSource bs = new BindingSource(list, "Code");
    myGrid.DataSource = bs;


Как мне сделать так, чтобы после выполнения “myGrid.DataSource = bs” мой грид отобраал бы не все строки из list, а только скажем те где IObj.Code == 1?

Причём myGrid не является readonly. Пользователь может там добавлять, обновлять и удалять строки.
И мне нужно (таково условие задачи) чтобы все эти изменения немедленно отображались бы в том списке BindingList<IObj> list. Значит, я не могу просто создать у себя “клон” этого списка, отфильтровав ненужные элементы.

Как написано выше, этот список приходит “из другого модуля программы”, который (модуль) я не контролирую и что-либо менять в нём не могу.

Можно ли эту задачу решить?

Автор: chupachups 24.3.2016, 09:47
https://msdn.microsoft.com/ru-ru/library/bb397919.aspx - myGrid.DataSource = list.Where(item => item.Code == 1).AsDataView()
или
https://msdn.microsoft.com/ru-ru/library/system.windows.forms.bindingsource.filter(v=vs.110).aspx

читайте люди справку...

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Kak-otfiltrovat-stroki-v-DataGridView-id56f2fb62ae20152f178b4567#findElement_E7045_56f38d67ae20158448cd5a1f_0

Автор: Glen 24.3.2016, 11:15
Цитата(chupachups @ 24.3.2016,  09:47)
https://msdn.microsoft.com/ru-ru/library/bb397919.aspx - myGrid.DataSource = list.Where(item => item.Code == 1).AsDataView()
или
https://msdn.microsoft.com/ru-ru/library/system.windows.forms.bindingsource.filter(v=vs.110).aspx

читайте люди справку...

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Kak-otfiltrovat-stroki-v-DataGridView-id56f2fb62ae20152f178b4567#findElement_E7045_56f38d67ae20158448cd5a1f_0

Спасибо за ответ

Что касается BindingSource.Filter - нет, это у меня точно не сработает; уже пробовал

Сам по себе BindingSource.Filter - всего лишь строка говорящая "как фильтровать". 

http://stackoverflow.com/questions/1...-as-datasource :


As per http://msdn.microsoft.com/en-us/libr...ce.filter.aspx

Only underlying lists that implement the IBindingListView interface support filtering.
BindingList<T> does not appear to implement IBindingListView - and since it is the underlying list, your collection will not filter.


А у меня как раз и испрльзуется BindingList<T>, которые НЕ реализует IBindingListView.

Потому установка  чего-то в BindingSource.Filter у меня ни к чему не приводит

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)