DataGridView过滤

时间:2009-09-30 22:53:11

标签: c# datagridview filtering ilist

我正在创建一个应该能够采用任何类型列表的控件。基本上是以下代码:

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

现在我有一个文本框,我想用它来过滤网格中的数据。我认为它就像设置bs.Filter属性一样简单,但显然不是。 bs.SupportsFiltering也返回false。

这是我使用IList的问题吗?如果是这样,是否有另一个我可以用来实现相同效果的集合类/接口? (同样,我不确定列表中对象的类型是什么。

2 个答案:

答案 0 :(得分:4)

我不知道我通过的类型,我导致手动过滤数据。 这是我的代码片段。它运作良好。希望大量数据不会太慢。 ::手指交叉::

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;

答案 1 :(得分:0)

IBindingListView 接口通过添加对列表过滤的支持来补充IBindingList接口的数据绑定功能。

可以找到一些通用IBindingListView实现的解决方案here