DataView.RowFilter筛选DataTable中的数据

//定义一个DataView ,得到一个全部职员的视图
DataView dataView1 = DbHelperSQL.QueryDataView(sql);

//过滤得到一个只显示男职员的视图 
dataView1.RowFilter = " sex='男' ";

//放弃过滤,现在仍然能够得到一个全部职员的视图
dataView1.RowFilter = null;

//现在过滤得到一个只显示女职员的视图 
dataView1.RowFilter = " sex='女' ";

//获取性别字段为空的职员
dataView1.RowFilter = " sex is null ";
//或者
dataView1.RowFilter = " Isnull( sex, 'Null Column') = 'Null Column' ";

//获取时间为空(NULL)和非空的视图
dataView1.RowFilter = " AddTime is null ";//空
dataView1.RowFilter = " AddTime is not null ";// 非空
//或者这里也可以先用Convert将日期时间(DateTime)字段转为字符串,然后做空值比较
dataView1.RowFilter = " Isnull( Convert(AddTime, 'System.String'),'Null Column') = 'Null Column' "; //空
dataView1.RowFilter = " not ( Isnull( Convert(AddTime, 'System.String'),'Null Column') = 'Null Column' ) "; // 非空



DataTable dt = DataView.ToTable();正确的。

DataTable dt = DataView.Table; 获取的是原来构造DataView的那个原表(没有过滤之前的那个表)。

重点在于DataView是DateTable相关联 的一个视图而已,无论你如何使用RowFilter,DataView虽然被改变,但 DateTable数据不会减少,所以你不要幻想连续使用多个RowFilter 来得到叠加过滤的效果,一个DataView只支持一个RowFilter,你只能使用 not ,and 来连接多个过滤条件。

--------------------------------------------------------------------------------------------------------------------------

若要形成 RowFilter 值,请指定列的名称,后跟一个运算符和一个要筛选的值。 该值必须用引号括起来。 例如:

"LastName = 'Smith'"

若要只返回那些具有 null 值的列,请使用以下表达式:

"Isnull(Col1,'Null Column') = 'Null Column'"

下面的示例创建 DataView 并设置它的 RowFilter 属性。


private void MakeDataView()  
{     
      DataView view = new DataView();      
      view.Table = DataSet1.Tables["Suppliers"];     
      view.AllowDelete = true;     
      view.AllowEdit = true;     
      view.AllowNew = true;     
      view.RowFilter = "City = 'Berlin'";     
      view.RowStateFilter = DataViewRowState.ModifiedCurrent;     
      view.Sort = "CompanyName DESC";      
      // Simple-bind to a TextBox control     
      Text1.DataBindings.Add("Text", view, "CompanyName"); 
} 

http://liug-li.blog.163.com/blog/static/2154166201241012941269/


                
在使用 DataGrid 控件进行模糊搜索时,可以使用 DataViewRowFilter 属性来实现。但是,如果在使用 RowFilter 时出现错误,则可能是由于以下原因之一: 1. 搜索字符串包含了特殊字符,比如单引号、百分号等。这些字符需要转义,否则会导致语法错误。可以使用字符串的 Replace 方法将这些特殊字符替换成转义字符。 2. 搜索字符串包含了非法的正则表达式语法,比如未闭合的括号、不匹配的方括号等。这些语法错误需要修正,以保证正则表达式语法正确。 3. DataView数据包含了空值或者 DBNull 值。在使用 RowFilter 进行搜索时,需要特别处理这些值,否则会导致运行时异常。 下面是一些示例代码,用于演示如何使用 DataViewRowFilter 进行模糊搜索: ```csharp private void DoSearch(string keyword) { // 将特殊字符转义 keyword = keyword.Replace("'", "''"); // 构造 DataViewRowFilter 表达式 string filter = string.Format("Name LIKE '%{0}%' OR Age LIKE '%{0}%'", keyword); // 进行搜索操作 DataView view = new DataView(dataTable, filter, "", DataViewRowState.CurrentRows); dataGridView.DataSource = view; } ``` 在上面的代码,我们首先使用字符串的 Replace 方法将单引号替换成两个单引号,以避免语法错误。然后,构造 DataViewRowFilter 表达式,使用 LIKE 运算符进行模糊搜索。最后,将 DataView 对象设置为 DataGridView 控件的数据源,以显示搜索结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值