2009-09-30 67 views
2

我正在创建一个应该能够接受任何列表的控件。基本上下面的代码:DataGridView筛选

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

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

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

回答

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; 
0

IBindingListView接口加入该列表的过滤支持补充IBindingList的接口的数据绑定功能。

一对夫妇为通用IBindingListView实现的解决方案,可以发现here