2015-04-14 40 views
1

我有一個datagridview從數據庫中獲取數據,三個checkBoxes應該用作過濾器。如何過濾使用多個複選框的datagridview

我想通過檢查checkedboxes的一個或多個過濾datagridview應展示我在datagridview所選的項目與它有關的金額:

datagridview

checkBoxes

我的代碼:

  if (cb11.Checked == true) 
     { 
      try 
      { 
       //Check an see what's in the dgv 
       DataView dv = new DataView(dt); 
       dv.RowFilter = " [AreaCode] = " + cb11.Text.Trim(); 
       datagridview1.DataSource = dv; 
      } 
      catch (Exception) 
      { 
       MessageBox.Show("Can’t find the column", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); 
      } 

     } 

這給我只有v alues for 11 如何加入另一個,以便我可以選擇倍數?

+0

聽起來不錯。你在等什麼? –

+0

Plz告訴我們你試過了什麼?和你正在面臨的問題 – sudhAnsu63

+0

嗨zohar, 我期待像excel過濾(動態): 如果我檢查16和31我期望在datagridview的結果是: '11 5.660.596 5.849.473。 -188.877.125' '31 88.326.252 88.702.273 -376.021.097' – mikybrain

回答

1

沒有看到您嘗試過的代碼,我只是給你一個可以嘗試的解釋。

假設你獲取數據,從數據庫中,只有一次:

  1. 從數據庫中獲取數據,並將其存儲在一個列表
  2. 你檢查每一次/取消選中複選框

    2.1。清除你的datagridview

    2.2。迭代你的列表並根據選中的複選框填充你的datagridview。

如果您要提取的數據進行多次:

  1. 每次檢查時間/取消選中複選框

    1.1。清除你的datagridview

    1.2。基於選中的複選框構建查詢

    1.3。查詢爲您的數據,並填充你的datagridview

編輯:

所以,你所提供的代碼,嘗試創建你會評估所有複選框後設置爲RowFilter,它的字符串。

 string rowFilter = string.Empty; 
     if (cb11.Checked) 
     { 
      rowFilter += " [AreaCode] = " + cb11.Text.Trim(); 
     } 
     if (cb16.Checked) 
     { 
      if (rowFilter.Length > 0) 
       rowFilter += " OR"; 
      rowFilter += " [AreaCode] = " + cb16.Text.Trim(); 
     } 
     if (cb31.Checked) 
     { 
      if (rowFilter.Length > 0) 
       rowFilter += " OR"; 
      rowFilter += " [AreaCode] = " + cb31.Text.Trim(); 
     } 

     try 
     { 
      //Check an see what's in the dgv 
      DataView dv = new DataView(dt); 
      dv.RowFilter = rowFilter; 
      datagridview1.DataSource = dv; 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("Can’t find the column", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
+0

Shar1嗨, 過濾只工作了CB11,如果我檢查了其他的,他們不是活得過濾。如果我選擇兩個或更多,它只篩選cb11 – mikybrain

+0

你可以編輯你的代碼發佈,所以我可以看到你的代碼示例中更改了什麼? – Shar1er80

+0

謝謝Shar1 我現在明白了。我的推理有一個錯誤:) – mikybrain

0

試試這個:

string RowFilter = string.Empty; 
CreateOrAppendToFilter(cb11, ref RowFilter); 
CreateOrAppendToFilter(cb16, ref RowFilter); 
CreateOrAppendToFilter(cb31, ref RowFilter); 
    if(RowFilter.Length > 0) 
    { 
    try 
     { 
      //Check an see what's in the dgv 
      DataView dv = new DataView(dt); 
      dv.RowFilter = RowFilter; 
      datagridview1.DataSource = dv; 
     } 
     catch (Exception) 
     { 
      MessageBox.Show("Can’t find the column", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     } 
    } 

    private void CreateOrAppendToFilter(CheckBox cb, ref string RowFilter) 
    { 
     if(RowFilter.Length>0) 
     { 
      RowFilter += " OR "; 
     } 
     RowFilter += (cb.Checked) ? string.Format("[AreaCode] = {0}", cb.Text.Trim()) : string.Empty ; 
    }