2015-10-09 56 views
0

我有數據網格視圖,並在一個列中包含數值,我試圖應用濾波器顯示更大等,但我無法與解決方案。在C#中的DataGridview中應用數值濾波器

屏幕:

enter image description here

代碼:

調用類方法和值分配給datagridview的

dataGridViewKeywords = filter.Filter(dataGridViewKeywords, mainValue, true); 

類文件:

class FilterDataGridView 
{ 
    private DataGridView modifiedDGV = new DataGridView(); 
    private string keyword; 
    private int competionScore; 
    DataTable dt = new DataTable(); 


    public DataGridView Filter (DataGridView dgv, int value, bool isabove) 
    { 
     modifiedDGV.Columns.Add("keyword", "Keyword") ; 
     modifiedDGV.Columns.Add("competition", "Avg. Competition Score"); 
     modifiedDGV.Columns.Add("moreinfo", "More Info"); 

     if (isabove) 
     { 
      for (int row = 0; row < dgv.Rows.Count; row++) 
      { 
       competionScore = Convert.ToInt32(dgv.Rows[row].Cells[1].Value); 
       keyword = dgv.Rows[row].Cells[0].Value.ToString(); 

       if (competionScore > value) 
        modifiedDGV.Rows.Add(keyword, competionScore, "View"); 
      } 
     } 

     return modifiedDGV; 
    } 

回答

1

最簡潔的解決方案是與BindingSource一起使用。

您在BindingSource級別內提供您的數據,並將DataGridView.DataSource設置爲此BindingSource

BindingSource本身或多或少是一個更好的名單,也有一個Filter-屬性,它可以讓你應用標準很容易。這樣你就不必亂用所有這些物品,甚至可以創建第二個DataGridView

+0

感謝您的回覆,但如何應用過濾器爲int我想過濾器似乎並不工作'bind.Filter =「AvgCompetitionScore> 30」;' –

+0

這不完全正確。 BindingSource並沒有爲你實現過濾/排序,它實際上只是一個包裝,它依賴於底層的數據源來做到這一點。更具體地說,就是'IBindingListView'的實現。真正實現該接口的唯一標準數據源是'System.Data.DataView'。 –

+0

@IvanStoev現在我明白我會嘗試找出現在的解決方案 –