• 对gridView数据进行筛选 GetDataTable_LikeString


    /// <summary>
            /// 对gridView数据进行筛选 返回RowFilter 字符,如果有PY列,则会一并处理 注意 返回是  and (xxx like xxx) 有And 进行连接
            /// </summary>
            /// <param name="view">要筛选的GridView 仅处理显示列</param>
            /// <param name="_inputTxt">要筛选的文本,中间可以有空格,具体空格用途见第三个参数,注意不要对用户录入的txt做特殊字符过滤处理</param>
            /// <param name="comperType">如果要筛选的文本,中间可以有空格,则要如何处理,默认不处理 类似如 用户录入 湖南 长沙,可以筛选出包含湖南和长沙的内容 </param>
            /// <returns>注意 返回是  and (xxx like xxx) 有And 进行连接</returns>
            public static string GetDataTable_LikeString(DevExpress.XtraGrid.Views.Grid.GridView view, string _inputTxt, EnComperType comperType = EnComperType.None)
            {
                if (view == null || view.GridControl == null || string.IsNullOrEmpty(_inputTxt))
                    return "";
                DataTable dt = view.GridControl.DataSource as DataTable;
                if (dt == null)
                    return "";
                List<string> visableCol = new List<string>();
                foreach (DevExpress.XtraGrid.Columns.GridColumn col in view.VisibleColumns)
                {
                    visableCol.Add(col.FieldName);
                }
                //处理所有以PY列开头或结尾的
                foreach (DataColumn item in dt.Columns)
                {
                    if (item.ColumnName.ToUpper().StartsWith("PY") || item.ColumnName.ToUpper().EndsWith("PY"))
                        visableCol.Add("PY");
                }
    
                string strFilter = "";
                string[] spinput = _inputTxt.Trim().Split(' ', ' ');
                List<string> spinput2 = new List<string>();
                foreach (string item in spinput)
                {
                    if (item.Trim() == "")
                        continue;
                    if (!spinput2.Contains(item.Trim()))
                        spinput2.Add(item.Trim());
                }
                if (spinput2.Count > 1)
                {
                    if (comperType == EnComperType.None)
                    {
                        strFilter = GetDataTable_LikeString_Base(dt, _inputTxt, string.Join(",", visableCol.ToArray()));
                    }
                    else
                    {
                        string tempstr = "";
                        for (int i = 0; i < spinput2.Count; i++)
                        {
                            tempstr = GetDataTable_LikeString_Base(dt, spinput2[i], string.Join(",", visableCol.ToArray()));
                            if (i == 0)
                            {
                                strFilter = tempstr;
                            }
                            else
                            {
                                strFilter = strFilter + (comperType == EnComperType.And ? " And " : " Or ") + tempstr;
                            }
                        }
                    }
    
                }
                else
                {
                    strFilter = GetDataTable_LikeString_Base(dt, _inputTxt, string.Join(",", visableCol.ToArray()));
                }
                if (strFilter.Length > 0)
                {
                    strFilter = " AND ( " + strFilter + ") ";
                }
                return strFilter;
            }
    
            /// <summary>
            /// 对DataTable数据进行筛选 返回RowFilter 字符,如果有PY列,则会一并处理 注意 返回是    (xxx like xxx) 没有And 进行连接
            /// </summary>
            /// <param name="sourceDT">目标表</param>
            /// <param name="_inputTxt">需要匹配的字符串</param>
            /// <param name="isRepRowFilterStr">是否需要做ToRowFilterStr 特殊字符过滤 处理,</param>
            /// <returns>返回 ( filedName like '%ZS%')</returns>
            public static string GetDataTable_LikeString_Base(DataTable sourceDT, string _inputTxt, string filterColumsStr, bool isRepRowFilterStr = true)
            {
                if (string.IsNullOrEmpty(_inputTxt))
                    return "";
                StringBuilder strB = new StringBuilder();
                string likeStr = isRepRowFilterStr ? _inputTxt.ToRowFilterStr() : _inputTxt;
                if (_inputTxt.Contains("%"))
                    likeStr = _inputTxt;
                else
                    likeStr = $"%{likeStr}%";
                //判断目标表是否为空,是否没有列
                if (sourceDT == null || sourceDT.Columns.Count == 0)
                    return "";
                //循环所有的列
                foreach (DataColumn columnCollection in sourceDT.Columns)
                {
                    //columnCollection.DataType.FullName.Dump();
                    string rowfilterFiled = "";// Convert(AddTime, 'System.String')
                    string columnName = columnCollection.ColumnName.ToStringNull();
                    if (columnName == "")
                        continue;
                    if (filterColumsStr != null)
                    {
                        var filterColums = filterColumsStr.Split(',', '');
                        if (filterColums.Length > 0)
                            if (!Array.Exists(filterColums, (t) => { return t.Trim().ToUpper() == columnName.Trim().ToUpper(); }))
                            {
                                continue;
                            }
                    }
                    switch (columnCollection.DataType.FullName)
                    {
                        case "System.Int32":
                        case "System.Int64":
                        case "System.Decimal":
                        case "System.Single":
                        case "System.Double":
                        case "System.DateTime":
                            rowfilterFiled = "Convert([" + columnName + "], 'System.String')";
                            break;
                        case "System.String":
                            rowfilterFiled = "[" + columnName + "]";
                            break;
                    }
                    if (string.IsNullOrEmpty(rowfilterFiled))
                        continue;
                    strB.Append($"{rowfilterFiled} like '{likeStr}' OR ");
    
                }
                string filterStr = strB.ToString();
                if (filterStr.Length > 0) //有数据
                {
                    //去掉最后的“ OR ”
                    filterStr = "(" + filterStr.Substring(0, filterStr.Length - 3) + ")";
                }
                return filterStr;
    
            }
    
            /// <summary>
            /// 当录入内容有空格时,要怎么处理
            /// </summary>
            public enum EnComperType
            {
                /// <summary>
                /// 不处理录入的筛选内容是否有空格
                /// </summary>
                None,
                /// <summary>
                ///如果用户录入有空格,则进行空格前 后使用And拼接
                /// </summary>
                And,
                /// <summary>
                /// 如果用户录入有空格,则进行空格前 后使用Or拼接
                /// </summary>
                Or,
            }
  • 相关阅读:
    c++的正则库 pcre
    http://alibench.com
    常用正则表达式,来自新浪微博的js
    mysql的反向
    字母汉子组合的验证码,包括实现看不清换一个的功能
    什么是Ajax
    做“时间日志”
    计划比目标还要重要!
    成功座右铭一
    建立组织
  • 原文地址:https://www.cnblogs.com/hdl217/p/12468530.html
Copyright © 2020-2023  润新知