DataGridView过滤区分大小写问题
2013-11-27 23:03
363 查看
DataTable上的过滤方法:
一、可以用DataTable.Select("条件"),返回DataRow[]格式的结果集。
想要在网格上看到过滤后的效果,则还需要进一步转换:
先看一个错误的写法:
上面的写法会报错,因为DataRow是属于其他DataTable的(这个和我们复制一个XmlNode时是一个道理,不能直接取出一个xmlNode的子节点,然后另外一个节点用Append(node)方法将其添加进来,此时会报相同的错误,提示该节点是属于另外一个xmlNode节点的)。正确的写法如下:
要用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属性来设置其是否大小写敏感,但是这个会对整个网格都生效,例如以上这个例子中,有的过滤条件是大小写敏感的而有的条件又是不敏感的。
后来的解决方法如下:
当哪一行是大小写不敏感时,就对这一行进行特殊考虑,把大写和小写都考虑进去,用or连接。然后拼成sql串。
注意:dv.RowFilter="UPPER(CNAME) like '%A%'"是不支持的。即在RowFilter中不支持大小写的转换,只能写过滤语句。不能有其他的函数。
一、可以用DataTable.Select("条件"),返回DataRow[]格式的结果集。
DataRow[] drArr = dt.Select("C1 LIKE ’abc%’");//模糊查询
想要在网格上看到过滤后的效果,则还需要进一步转换:
先看一个错误的写法:
DataTable dtNew = dt.Clone(); for (int i = 0; i < drArr.Length; i++) { dtNew.Rows.Add(drArr[i]); }
上面的写法会报错,因为DataRow是属于其他DataTable的(这个和我们复制一个XmlNode时是一个道理,不能直接取出一个xmlNode的子节点,然后另外一个节点用Append(node)方法将其添加进来,此时会报相同的错误,提示该节点是属于另外一个xmlNode节点的)。正确的写法如下:
DataTable dtNew = dt.Clone(); for (int i = 0; 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中不支持大小写的转换,只能写过滤语句。不能有其他的函数。
相关文章推荐
- sql 查询 区分大小写问题
- MySQL查询不区分大小写问题
- Linux环境下MySQL数据库大小写区分问题
- 关于mysql的表名/字段名/字段值是否区分大小写的问题
- 针对解决sql server数据库中不区分大小写问题
- MySQL查询不区分大小写问题
- MySQL填坑系列--Linux平台下MySQL区分大小写问题
- 针对解决sql server数据库中不区分大小写问题.
- linux下解决mysql区分大小写问题
- sql server数据库不区分大小写-密码验证问题
- 数据库SQL中的分钟表示应该使用MI(非常重要的一个问题,以前一直认为和java中一样,用mm就可以表示);校对规则(查询时区分大小写)
- mysql 如何解决字段不区分大小写的问题
- PHP大小写问题:函数名和类名不区分,变量名区分
- MySQL中的表名、列名、别名区分大小写的问题及解决办法
- 处理mysql不区分字母大小写的问题
- Linux环境下MySQL数据库大小写区分问题
- MySQL数据库表名、列名、别名区分大小写的问题及解决
- 解决MySQL数据库不区分大小写的问题
- MySQL数据库表名、列名、别名区分大小写的问题及解决
- 10g的sqlplus区分大小写问题