Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在c中按单元格值筛选datagridview中的行#_C#_Datagridview_Filter - Fatal编程技术网

C# 如何在c中按单元格值筛选datagridview中的行#

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

我有一个datagridview,它有5个单元格 我想在某些条件下筛选行,即第5个单元格的值不是0

我尝试了以下代码,但没有正常工作

 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();它不起作用,我想解决方案应该在存储过程中,我用存储过程编辑了这篇文章