views:

913

answers:

2

I have a DataGridView that is displaying a List of objects (not DataSet). Is there an easy way to set a filter, so the DGV will only display rows that match the filter?

IList<T> log = ...;
dgv.DataSource = log;
+1  A: 

You could do Log.Where(filter) That's generally how I filter items in a list bound to a DGV if I don't have control over the generation.

Quintin Robinson
+3  A: 

Do you have LINQ available? If so, one option is:

dgv.DataSource = log.Where(x=>x.IsActive && x.Type == 3).ToList();

However, new/removed rows won't update the original list (edits to existing rows are fine).

If not LINQ, you can do the same with List<T>.FindAll:

dgv.DataSource = log.FindAll(delegate (SomeType x) {
    return x.IsActive && x.Type == 3;});

There is the IBindingListView.SupportsFiltering / IBindingListView.Filter pair, but none of the standard lists (including BindingList<T>) implement this feature.

Marc Gravell