DataTable上的过滤方法:

一、可以用DataTable.Select("条件"),返回DataRow[]格式的结果集。

DataRow[] drArr = dt.Select("C1 LIKE ’abc%’");//模糊查询

想要在网格上看到过滤后的效果,则还需要进一步转换:

先看一个错误的写法:

DataTable dtNew = dt.Clone();
for (int i = ; i < drArr.Length; i++)
{
dtNew.Rows.Add(drArr[i]);
}

上面的写法会报错,因为DataRow是属于其他DataTable的(这个和我们复制一个XmlNode时是一个道理,不能直接取出一个xmlNode的子节点,然后另外一个节点用Append(node)方法将其添加进来,此时会报相同的错误,提示该节点是属于另外一个xmlNode节点的)。正确的写法如下:

DataTable dtNew = dt.Clone();
for (int i = ; i < drArr.Length; i++)
{
dtNew.ImportRow(drArr[i]);
}

要用Import的方式,同理,如果是将一个xmlNode复制到另一个xmlNode的子下面去时,也应该用Node.ImportNode()方法。

得到了过滤后的数据源后,将其绑定到当前网格即可。但是这种方法也有它的弊端,此时网格的数据源已经改变了!如果再要求有一个取消过滤的功能,那么如果不事先保存原来的数据源,便不能再回到初始状态。

二、DataTable.DefaultView.RowFilter="过滤条件"

DataTable.DefaultView是DataTable的一个视图。在博客园中曾经参考了博客http://www.cnblogs.com/spirithero/archive/2011/07/20/2111351.html

其中将Default的用法讲的很详细。

前段时间在项目中遇到了一个DataTable过滤区分大小写的问题,我把原来的界面做了一个比较丑,比较简陋的界面,但是功能都有了。具体的界面如下:

可以用DataTable的CaseSensitive属性来设置其是否大小写敏感,但是这个会对整个网格都生效,例如以上这个例子中,有的过滤条件是大小写敏感的而有的条件又是不敏感的。

后来的解决方法如下:

var dt=(DataTable)DataGridViewFilter.DataSource;

dt.CaseSensitive=true;

var dv=dt.DefaultView;

var upperChar='b'.ToUpper();//获取不区分大小写的行,将这一行的值分别转化为大写和小写的
var lowerChar='b'.ToLower();
dv.RowFilter=('CID like '%a%'' and (CNAME='upperChar' || CNAME='lowerChar') or CCLASS like '%C%');

当哪一行是大小写不敏感时,就对这一行进行特殊考虑,把大写和小写都考虑进去,用or连接。然后拼成sql串。

注意:dv.RowFilter="UPPER(CNAME) like '%A%'"是不支持的。即在RowFilter中不支持大小写的转换,只能写过滤语句。不能有其他的函数。

DataGridView过滤区分大小写问题的更多相关文章

  1. Winform系列——好用的DataGridview过滤控件(表格的高级搜索功能)

    上一篇 Winform系列——好看的DataGridView折叠控件 中主要介绍了DataGridview的表格多级折叠功能.这章主要介绍下最近封装的另一个DataGridview表格高级过滤的功能. ...

  2. DataGridView过滤功能

    http://www.codeproject.com/Articles/33786/DataGridView-Filter-Popup http://www.cnblogs.com/jaxu/arch ...

  3. c# datagridview按条件搜索查询过滤

    DataView的RowFilter 实现过滤 根据文本框文字对datagridview的数据进行模糊查询, 其实也就是一个过滤 string qymc = textBox1.Text.ToStrin ...

  4. .NET WinForm程序中给DataGridView表头添加下拉列表实现数据过滤

    转:http://www.cnblogs.com/jaxu/archive/2011/08/04/2127365.html 我们见过Excel中的数据过滤功能,可以通过点击表头上的下拉列表来实现数据的 ...

  5. Filter 数组过滤函数精解示例

    '************************************************************************* '**模 块 名:Filter 数组过滤函数精解示 ...

  6. DataTable的过滤需要的数据

    DataView dv = datatable.DefaultView;           (1)      dv.RowFilter = "RowsId>3";  //此 ...

  7. WEKA使用(基础配置+垃圾邮件过滤+聚类分析+关联挖掘)

    声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的WEKA,实验内容主要有三部分,第一是分类挖掘(垃圾邮件过滤),第二是聚类分析, ...

  8. C#实现通用数据过滤窗体

    最近一直在做WINFORM项目,所以经常有些新的想法或尝试与大家分享,之前与大家分享了通用窗体遮罩层.通用可附加数据绑定的DataGridView.窗体渐显,今天来分享一个大家在其它软件中常见的功能: ...

  9. Shell编程基础教程5--文本过滤、正则表达式、相关命令

    5.文本过滤.正则表达式.相关命令    5.1.正则表达式(什么是正则表达式?正则表达式怎么进行匹配?常用命令)        简介:            一种用来描述文本模式的特殊语法      ...

随机推荐

  1. nodejs笔记三--url处理、Query String;

    URL--该模块包含用以 URL 解析的实用函数. 使用 require('url') 来调用该模块. 一.parse函数的基础用法 parse函数的作用是解析url,返回一个json格式的数组,请看 ...

  2. 阿里云:linux 一键安装web环境

    参考地址:http://www.cnblogs.com/ada-zheng/p/3724957.html

  3. block extends include三者的差别跟用法

    block extends include三者的差别跟用法 一.定义基础模板,在html内容中定义多个block块,block由子模板引用同名block块,来决定是否替换这些部分{% block ti ...

  4. boost之signal

    boost里的signal是一个模板类,不区分信号种类,产生信号统一用()调用操作符. 1.回调普通函数代码示例: #include <iostream> #include <str ...

  5. dancing link

    http://www.cnblogs.com/grenet/p/3145800.html 链接给的博客写的很好,比较好懂. 可惜不是c语言... 于是决定自己要建一个模板. 一道裸题:hustoj 1 ...

  6. ios 调用打印机

    源码 无意中玩一个demo发现调用了打印机  才发现ios有快速调用打印机的功能. if ([UIPrintInteractionController isPrintingAvailable] == ...

  7. UML教程首页(转载)

    UML是一种标准语言,用于指定,可视化,构造和文档的软件系统的文物. UML是OMG在1997年1月提出了创建由对象管理组和UML1.0规范草案. 本教程给出了一个比较完整的学习理解UML,可以方便学 ...

  8. 用fabric部署维护kle日志收集系统

    最近搞了一个logstash kafka elasticsearch kibana 整合部署的日志收集系统.部署参考lagstash + elasticsearch + kibana 3 + kafk ...

  9. ol3简介

    ol3从根本上进行了重新设计,相对于ol2,他符合现代浏览器的一些设计理念,使用了js新的特性,initial版本的目的是支持原来ol2的大多数功能,支持公网上流行的缓存切片,支持常见的矢量数据格式. ...

  10. HDOJ 1226 超级密码

    超级密码 Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...