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