• DataGridView过滤区分大小写问题


    DataTable上的过滤方法:

    一、可以用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中不支持大小写的转换,只能写过滤语句。不能有其他的函数。

  • 相关阅读:
    BZOJ 3527: [Zjoi2014]力 [快速傅里叶变换]
    BZOJ 2194 [快速傅里叶变换 卷积]
    BZOJ 2179 [快速傅里叶变换 高精度乘法]
    [快速傅立叶变换&快速傅里叶变换]【旧 手写笔记】
    CF 235C. Cyclical Quest [后缀自动机]
    BZOJ 1396&&2865 识别子串[后缀自动机 线段树]
    BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster [广义后缀自动机]
    BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡 [广义后缀自动机 Trie]
    BZOJ 2806: [Ctsc2012]Cheat [广义后缀自动机 单调队列优化DP 二分]
    BZOJ 3473: 字符串 [广义后缀自动机]
  • 原文地址:https://www.cnblogs.com/hanpanpan/p/3446752.html
Copyright © 2020-2023  润新知