如何解决如何使用复选框在单个 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 个过滤器选择如何/将如何工作。我们只是将每个选项的过滤器构建成一个字符串。如果未选中过滤器复选框,则不会发生任何事情 - 我们只是继续构建并且仅针对每个复选框选项构建。
一旦我们有了过滤字符串,就需要对数据表进行一次操作,因此我们将数据视图应用于网格控件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。