C# 如何在c中按单元格值筛选datagridview中的行#
我有一个datagridview,它有5个单元格 我想在某些条件下筛选行,即第5个单元格的值不是0 我尝试了以下代码,但没有正常工作C# 如何在c中按单元格值筛选datagridview中的行#,c#,datagridview,filter,C#,Datagridview,Filter,我有一个datagridview,它有5个单元格 我想在某些条件下筛选行,即第5个单元格的值不是0 我尝试了以下代码,但没有正常工作 for (int i = 0; i < frm.dataGridView1.Rows.Count; i++) { if (frm.dataGridView1.Rows[i].Cells[5].Value.ToString() == "0") { Currenc
for (int i = 0; i < frm.dataGridView1.Rows.Count; i++)
{
if (frm.dataGridView1.Rows[i].Cells[5].Value.ToString() == "0")
{
CurrencyManager currencyManager1 = (CurrencyManager)dataGridView1.BindingContext[dataGridView1.DataSource];
currencyManager1.SuspendBinding();
dataGridView1.Rows[i].Selected = false;
dataGridView1.Rows[i].Visible = false;
currencyManager1.ResumeBinding();
}
else
{
dataGridView1.Rows[i].Visible = true;
dataGridView1.Rows[i].Selected = true;
}
}
请尝试下面的代码并查看注释以了解详细信息
//USE A FOREACH, YOU DO NOT NEED WORRY ABOUT INDEXS (WHICH CAUSES PROBLEMS MANY TIMES)
foreach (DataGridViewRow rowItem in dataGridView1.Rows)
{
//CHECK FOR OBJECT EXISTENCE BEFORE DOING ANYTHING
//AVOID ACCESSING CELL VALUE WITH INDEX. GO WITH COLUMN NAME. NO ISSUES IF COLUMNS ARE ALTERED LATER POINT.
if (rowItem.Cells["number"].Value != null)
{
//CHECK THE VALUE AND SET VISISBLE/INVISIBLE
if (rowItem.Cells["number"].Value.ToString() == "0")
rowItem.Visible = false;
else
rowItem.Visible = true;
}
}
请尝试下面的代码并查看注释以了解详细信息
//USE A FOREACH, YOU DO NOT NEED WORRY ABOUT INDEXS (WHICH CAUSES PROBLEMS MANY TIMES)
foreach (DataGridViewRow rowItem in dataGridView1.Rows)
{
//CHECK FOR OBJECT EXISTENCE BEFORE DOING ANYTHING
//AVOID ACCESSING CELL VALUE WITH INDEX. GO WITH COLUMN NAME. NO ISSUES IF COLUMNS ARE ALTERED LATER POINT.
if (rowItem.Cells["number"].Value != null)
{
//CHECK THE VALUE AND SET VISISBLE/INVISIBLE
if (rowItem.Cells["number"].Value.ToString() == "0")
rowItem.Visible = false;
else
rowItem.Visible = true;
}
}
据我所知,过滤DataGridView的最佳通用方法是a)将数据保存在DataTable中,2)创建DataView对象并将DataView的DataSource设置为DataTable。3) 将DataGridView数据源设置为DataView。之后,可以使用DataView对象的RowFilter属性作为一种仿sql过滤器。所需的代码量最少,而且几乎可以肯定比您自己能想到的任何东西都要快。@AvoNappo我通过以下代码做到了这一点:dataView1.RowFilter=“second='0';但是这显示了包含0的行,我如何做相反的事情呢?我所知道的过滤DataGridView的最佳通用方法是a)将数据保存在DataTable中,2)创建DataView对象并将DataView的DataSource设置为DataTable。3) 将DataGridView数据源设置为DataView。之后,可以使用DataView对象的RowFilter属性作为一种仿sql过滤器。所需的代码量最少,而且几乎可以肯定比您自己能想到的任何东西都要快。@AvoNappo我通过以下代码做到了这一点:dataView1.RowFilter=“second='0';但这显示了包含0的行,我如何做相反的事情?我尝试过,但没有效果,我使用存储过程作为数据源,这可能是问题的原因吗?您是否可以自己过滤存储过程中的行?是的,这是可能的,但我对itok没有多少经验。你能再试一次吗?请在每次使用前执行此操作。CurrencyManager CurrencyManager 1=(CurrencyManager)dataGridView1.BindingContext[dataGridView1.DataSource];currencyManager1.SuspendBinding();它不起作用,我想解决方案应该在存储过程中,我用存储过程编辑了文章我尝试过但没有效果,我使用存储过程作为数据源,这可能是问题的原因吗?您是否可以自己过滤存储过程中的行?是的,这是可能的,但我对伊托克几乎没有经验。你能再试一次吗?请在每次使用前执行此操作。CurrencyManager CurrencyManager 1=(CurrencyManager)dataGridView1.BindingContext[dataGridView1.DataSource];currencyManager1.SuspendBinding();它不起作用,我想解决方案应该在存储过程中,我用存储过程编辑了这篇文章