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

How to merge multiple Row Filter Records in a single Gridview using Checkbox

我想根据复选框中提到的特定条件,从在 gridview 中上传的 excel 文件中检索特定记录。选中一个复选框时,我的代码可以完美运行,但在选择多个复选框的情况下,它不会 respond/search 记录,并且仅基于一个复选框在 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 个复选框。如果选中它们,那么我们需要那个过滤器。

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

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

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

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

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

所以代码思路、代码方法、代码概念将如下所示:

请非常小心地注意此代码如何适用于 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();
}

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

一旦我们有了过滤器字符串,就需要一个操作来过滤数据 table,因此我们将数据视图应用到网格控件。