【发布时间】:2017-10-04 16:30:52
【问题描述】:
我有一个包含 5 个单元格的表单中的 datagridview 我想在某些条件下过滤行,即第 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;
}
}
我用来接收数据的存储过程
@Criterion varchar(30)
as
SELECT [id] as
,[car_num]
,[customer]
,[driver]
,[first]
,[second]
,[sum]
,[price]
,[date1]
,[date2]
,[city]
,[type]
FROM [dbo].[Data]
where
[car_num]+
[customer]+
[driver]+
convert (varchar, [first])+
convert (varchar, [second])+
convert (varchar, [sum])+
convert (varchar, [price])
like '%' + @Criterion +'%'
【问题讨论】:
-
我所知道的过滤 DataGridViews 的最佳通用方法是 a) 将数据保存在 DataTable 中,2) 创建一个 DataView 对象并将 DataView 的 DataSource 设置为 DataTable。 3) 将DataGridView 数据源设置为DataView。之后,您可以将 DataView 对象的 RowFilter 属性用作某种 ersatz sql 过滤器。所需的代码量最少,而且几乎可以肯定比您自己想出的任何代码都快。
-
@AvoNappo 我通过代码实现了这一点:dataView1.RowFilter = "second='0'";但这显示了包含 0 的行,我该如何做相反的事情?
标签: c# datagridview filter