如何使用多个复选框过滤datagridview

时间:2015-04-14 13:16:55

标签: c# winforms datagridview

我有一个datagridview从数据库获取数据,有三个checkBoxes应该用作过滤器。

我想通过选中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);
            }

        }

这只给我11的值 我如何加入另一个,以便我可以选择倍数?

2 个答案:

答案 0 :(得分:1)

如果没有看到您尝试过的代码,我只会解释您可以尝试的内容。

假设您只从数据库中获取数据一次:

  1. 从数据库中获取数据并将其存储在列表中
  2. 每次选中/取消选中复选框

    2.1。清除datagridview

    2.2。遍历您的列表并根据选中的复选框填充您的datagridview。

  3. 如果您多次提取数据:

    1. 每次选中/取消选中复选框

      1.1。清除datagridview

      1.2。根据选中的复选框构建查询

      1.3。查询您的数据,并填充您的datagridview

    2. 修改

      因此,使用您提供的代码,尝试创建一个字符串,在评估所有复选框后,您将设置为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);
              }
      

答案 1 :(得分: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 ;
    }