如何使用复选框在单个 Gridview 中合并多个行过滤器记录

问题描述

我想根据复选框中提到的特定条件从上传到 gridview 的 excel 文件中检索特定记录。当检查一个复选框时,我的代码完美地工作,但在多个复选框选择的情况下,它不会响应/搜索记录,并仅根据一个复选框显示GridView中的记录。据我了解,它与“Rowfilter”属性有关。

以下是我的“搜索”按钮中的代码

private void Btn_Search_Click(object sender,EventArgs e)
 {
             dt = Form1.dataRecord;
             DataView dv = new DataView(dt);
             foreach (DaTarow dr in dt.Rows)
             {
                 if (Chk_CoS != null & Chk_CoS.Checked == true)
                 {
                     dv.RowFilter = "[COUNTRY OF SHIPMENT] = 'XYZ'";
                     LoadSNumber();
                     dataGridView2.DataSource = dv;
                 }
                 if (Chk_Amount != null & Chk_Amount.Checked == true)
                 {
                     dv.RowFilter = "[BILL AMOUNT] < [AMOUNT FINANCED]";
                     LoadSNumber();
                     dataGridView2.DataSource = dv;
                 }
                 if (Chk_Date != null & Chk_Date.Checked == true)
                 {
                     dv.RowFilter = "[Date of Finance] < [InvoiceDate]";
                     LoadSNumber();
                     dataGridView2.DataSource = dv;
                 }
               
             }
        }

        private void Chk_Date_CheckedChanged(object sender,EventArgs e)
        {
           
        }

        private void Chk_Amount_CheckedChanged(object sender,EventArgs e)
        {

        }

        private void Chk_CoS_CheckedChanged(object sender,EventArgs e)
        {
    
        }

        private void dataGridView2_CellContentClick(object sender,DataGridViewCellEventArgs e)
        {
            
        }

解决方法

因此,我们可能有 1 个或 4 个复选框。如果它们被选中,那么我们想要那个过滤器。

如果未选中,我们不在乎。

所以你要做的是为每个复选框建立一个基于字符串的过滤器,然后应用/创建/使用过滤器。

这样,下面的代码可以用于 2 或 16 个复选框 - 没关系。

为什么有一个 for/each 来设置过滤器?你不需要为每个过滤器设置一些 - 你有一些过滤器选项,你设置它们,然后设置一个过滤器。我对这里的每个数据行都没有反应? (很混乱????)。

因此,您有一个数据表,您设置了一个过滤器,然后应用该过滤器。我不认为每一行都需要一个。无论如何,针对表的过滤器适用于所有行。

因此代码思想、代码方法、代码概念将如下所示:

请非常小心地注意此代码如何用于 2 或 15 个复选框。我们简单地构建,添加每个选定的选项以构建一个过滤器,其中包含您选中并想要包含的所有选项 + 过滤器。

因此,这应该给你一个想法,这里是天堂的钥匙,它是如何工作的:

    dt = MyTable;     - whatever and how your table is - set here.
    string strFilter = "";
    DataView dv = new DataView(dt);

    if (Chk_CoS != null & Chk_CoS.Checked == true)
        strFilter = "([COUNTRY OF SHIPMENT] = 'XYZ' ) ";

    if (Chk_Amount != null & Chk_Amount.Checked == true)
    {
        if (strFitler != "")
            strFilter += " AND ";
        strFilter += "([BILL AMOUNT] < [AMOUNT FINANCED]) ";
    }

    if (Chk_Date != null & Chk_Date.Checked == true)
    {
        if (strFitler != "")
            strFilter += " AND ";

        strFilter += "([Date of Finance] < [InvoiceDate])";
    }

    // Now apply filter

    dv.RowFilter = strFilter;

    DataGridView2.DataSource = dv;
    DataGridView2.DataBind();
}

所以请注意这对于 2 或 15 个过滤器选择如何/将如何工作。我们只是将每个选项的过滤器构建成一个字符串。如果未选中过滤器复选框,则不会发生任何事情 - 我们只是继续构建并且仅针对每个复选框选项构建。

一旦我们有了过滤字符串,就需要对数据表进行一次操作,因此我们将数据视图应用于网格控件。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...