GRIDVIEW的筛选逻辑

本文介绍了一个用于GRIDVIEW的筛选逻辑实现方法,该方法通过不同的筛选器选项来生成SQL筛选条件。具体包括如何处理字符串匹配(如包含、不包含、以...开头等),数值比较(等于、不等于、大于、小于等)以及空值检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GRIDVIEW的筛选逻辑,其中funs为字段对应筛选器选项的名称,columns为对应字段的名称,vals为textbox所填的筛选数值,upper为筛选器的个数

  #region Helper Methods
    public static string FilterCondition(string[] funcs,string[] columns,string[] vals,int upper)
    {
        string filterCondition = "";
        for (int i = 0; i < upper; i++)
        {
            if (funcs[i] != String.Empty && funcs[i] != null)
            {
                switch (funcs[i])
                {
                    case "Contains":
                        filterCondition += columns[i] + " LIKE '%" + vals[i] + "%'";
                        break;
                    case "DoesNotContain":
                        filterCondition += columns[i] + " NOT LIKE '%" + vals[i] + "%'";
                        break;
                    case "StartsWith":
                        filterCondition += columns[i] + " LIKE '" + vals[i] + "%'";
                        break;
                    case "EndsWith":
                        filterCondition += "rtrim("+columns[i]+")" + " LIKE '%" + vals[i] + "'";
                        break;
                    case "EqualTo":
                        filterCondition += columns[i] + " = " + vals[i];
                        break;
                    case "NotEqualTo":
                        filterCondition += columns[i] + " != " + vals[i];
                        break;
                    case "GreaterThan":
                        filterCondition += columns[i] + " > " + vals[i];
                        break;
                    case "LessThan":
                        filterCondition += columns[i] + " < " + vals[i];
                        break;
                    //case "GreaterThanOrEqualTo":
                    //    filterCondition += Columns[i] + " >= " + Vals[i];
                    //    break;
                    //case "LessThanOrEqualTo":
                    //    filterCondition += Columns[i] + " <= " + Vals[i];
                    //    break;
                    //case "Between":

                    //    break;
                    //case "NotBetween":

                    //    break;
                    case "IsEmpty":
                        filterCondition += columns[i] + " = ''";
                        break;
                    case "NotIsEmpty":
                        filterCondition += columns[i] + " != ''";
                        break;
                    case "IsNull":
                        filterCondition += columns[i] + " is null ";
                        break;
                    case "NotIsNull":
                        filterCondition += columns[i] + " is not null";
                        break;
                    default:
                        break;
                }
                //filterCondition added like clause and next filter is not null 
                //appand " collate SQL_Latin1_General_Cp1_CS_AS and "
                if ((funcs[i] == "Contains" || funcs[i] == "DoesNotContain" || funcs[i] == "StartsWith" ||
                     funcs[i] == "EndsWith") &&(i < upper - 1 && funcs[i + 1] != null && filterCondition != String.Empty &&
                     funcs[i + 1] != String.Empty && funcs[i + 1] != "NoFilter"))
                    filterCondition += " collate SQL_Latin1_General_Cp1_CS_AS and ";
                //filterCondition added non-like clause and next filter is not null 
                //appand " and "
                else if(i < upper - 1 && funcs[i + 1] != null && filterCondition != String.Empty &&
                     funcs[i + 1] != String.Empty && funcs[i + 1] != "NoFilter")
                    filterCondition += " and ";
            }
        }
        //only filterCondition not empty and has % in the last clause that need appand collate SQL_Latin1_General_Cp1_CS_AS
        if (filterCondition != String.Empty && filterCondition.LastIndexOf('%')>filterCondition.Length-3)
            filterCondition += " collate SQL_Latin1_General_Cp1_CS_AS ";
        return filterCondition;
    }
    #endregion


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值