如何使用复选框在单个 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,因此我们将数据视图应用到网格控件。
我想根据复选框中提到的特定条件,从在 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,因此我们将数据视图应用到网格控件。