2009-09-30 63 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