2015-04-14 10 views
1

У меня есть datagridview, который получает свои данные из базы данных и три checkBoxes, которые должны использоваться в качестве фильтра.Как фильтровать datagridview с помощью нескольких флажков

Я хочу, чтобы фильтровать datagridview путем проверки одного или более из checkedboxes и должен показывать мне выбранный элемент в 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

Hi 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

EDIT:

Так с кодом вы предоставили, попробуйте создать строку, вы будете устанавливать на 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 ; 
    } 
Смежные вопросы