/// <summary> /// Reset the avl filter operations given the property type. This is called each time the control is configured by calling ResetFilterValues /// </summary> private void ConfigureFilterOptions() { FilterOperations.Clear(); if (FilterColumnInfo.PropertyType != null) { if (TypeHelper.IsStringType(FilterColumnInfo.PropertyType)) { FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.Contains, "Содержит", "/Jib.Controls;component/Images/Contains.png")); FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.StartsWith, "Начинается с", "/Jib.Controls;component/Images/StartsWith.png")); FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.EndsWith, "Заканчивается на", "/Jib.Controls;component/Images/EndsWith.png")); } FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.Equals, "Равно", "/Jib.Controls;component/Images/Equal.png")); if (TypeHelper.IsNumbericType(FilterColumnInfo.PropertyType)) { FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.GreaterThan, "Больше чем", "/Jib.Controls;component/Images/GreaterThan.png")); FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.GreaterThanEqual, "Больше или равно", "/Jib.Controls;component/Images/GreaterThanEqual.png")); FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.LessThan, "Меньше чем", "/Jib.Controls;component/Images/LessThan.png")); FilterOperations.Add(new FilterOperationItem(Enums.FilterOperation.LessThanEqual, "Меньше или равно", "/Jib.Controls;component/Images/LessThanEqual.png")); } SelectedFilterOperation = FilterOperations[0]; } }
/// <summary> /// This method creates the predicate for the given operation and text /// </summary> /// <param name="propertyName">The property which the header column is bound to</param> /// <param name="filterValue">The value for the predicate.</param> /// <param name="objType">The object type of the grid itemsource</param> /// <param name="propType">They type for the property</param> /// <param name="filterItem">The type of filter (i.e. Contains, Equals...)</param> /// <returns>The predicate</returns> protected Predicate<object> GenerateFilterPredicate(string propertyName, string filterValue, Type objType, Type propType, FilterOperationItem filterItem) { ParameterExpression objParam = System.Linq.Expressions.Expression.Parameter(typeof(object), "x"); UnaryExpression param = System.Linq.Expressions.Expression.TypeAs(objParam, objType); var prop = System.Linq.Expressions.Expression.Property(param, propertyName); var val = System.Linq.Expressions.Expression.Constant(filterValue); switch (filterItem.FilterOption) { case Enums.FilterOperation.Contains: return ExpressionHelper.GenerateGeneric(prop, val, propType, objParam, "Contains"); case Enums.FilterOperation.EndsWith: return ExpressionHelper.GenerateGeneric(prop, val, propType, objParam, "EndsWith"); case Enums.FilterOperation.StartsWith: return ExpressionHelper.GenerateGeneric(prop, val, propType, objParam, "StartsWith"); case Enums.FilterOperation.Equals: return ExpressionHelper.GenerateEquals(prop, filterValue, propType, objParam); case Enums.FilterOperation.GreaterThanEqual: return ExpressionHelper.GenerateGreaterThanEqual(prop, filterValue, propType, objParam); case Enums.FilterOperation.LessThanEqual: return ExpressionHelper.GenerateLessThanEqual(prop, filterValue, propType, objParam); case Enums.FilterOperation.GreaterThan: return ExpressionHelper.GenerateGreaterThan(prop, filterValue, propType, objParam); case Enums.FilterOperation.LessThan: return ExpressionHelper.GenerateLessThan(prop, filterValue, propType, objParam); default: throw new ArgumentException("Could not decode Search Mode. Did you add a new value to the enum, or send in Unknown?"); } }