private static void DoDataSourceRequestRefining(DataSourceRequest request, Kendo.Mvc.Infrastructure.Implementation.FilterDescriptorCollection filterDescriptorCollection, Type viewModelType) { IFilterDescriptor filterItem = null; foreach (var item in filterDescriptorCollection) { filterItem = item as Kendo.Mvc.FilterDescriptor; if (filterItem == null) { var compFilterItem = item as Kendo.Mvc.CompositeFilterDescriptor; if (CheckIfFilteritemIsFromViewModel((compFilterItem.FilterDescriptors[0] as Kendo.Mvc.FilterDescriptor).Member, viewModelType)) { _viewModelFilterItems.Add(compFilterItem); } } else if (CheckIfFilteritemIsFromViewModel((filterItem as Kendo.Mvc.FilterDescriptor).Member, viewModelType)) { //Adding ViewModel filter to its respective list. _viewModelFilterItems.Add(filterItem); } } if (_viewModelFilterItems.Count != 0) { foreach (var fiItem in _viewModelFilterItems) { //TODO: Omit the filter descriptor entry from DataSourceRequest RemoveFilterDescriptorFromDataSourceResult(request, fiItem); } } }
/// <summary> /// Investigates for the fields which are not in Model but in its respective ViewModel , and clears the incoming DataSourceRequest from the fields which are not going to be used in /// the Query parsing based on Model fields and , eventually , returns DataSourceRequest object which solely include ViewModel fields. /// </summary> /// <typeparam name="TModel"></typeparam> /// <typeparam name="ViewModel.IViewModel<TModel>"></typeparam> /// <param name="request"></param> /// <returns></returns> private static IEnumerable <Kendo.Mvc.IFilterDescriptor> RefineDataSource(this DataSourceRequest request, Type entityViewModelType) { _viewModelFilterItems = new List <Kendo.Mvc.IFilterDescriptor>(); var viewModelFields = entityViewModelType; if (typeof(IViewModel).IsAssignableFrom(entityViewModelType)) { var filters = (request.Filters as List <Kendo.Mvc.IFilterDescriptor>); foreach (var filterItem in filters) { if (filterItem is Kendo.Mvc.CompositeFilterDescriptor) { var filterDescriptors = (filterItem as Kendo.Mvc.CompositeFilterDescriptor).FilterDescriptors; DoDataSourceRequestRefining(request, filterDescriptors, entityViewModelType); var compositeFilterDescriptor = filterItem as Kendo.Mvc.CompositeFilterDescriptor; } else if (filterItem is Kendo.Mvc.FilterDescriptor) { var filterCollection = new Kendo.Mvc.Infrastructure.Implementation.FilterDescriptorCollection(); filterCollection.Add(filterItem as Kendo.Mvc.FilterDescriptor); DoDataSourceRequestRefining(request, filterCollection, entityViewModelType); break; } } } return(_viewModelFilterItems); }
public static Dictionary <string, object> GetFilterValues(this List <Kendo.Mvc.IFilterDescriptor> Filters) { var dictionary = new Dictionary <string, object>(); var rootFilterItem = (Filters as List <Kendo.Mvc.IFilterDescriptor>).First(); if (rootFilterItem is Kendo.Mvc.CompositeFilterDescriptor) { Kendo.Mvc.Infrastructure.Implementation.FilterDescriptorCollection filterDescriptors = (rootFilterItem as Kendo.Mvc.CompositeFilterDescriptor).FilterDescriptors; DataSourceRequestValueExtensions.ExtractCompositeFilterDescriptorValues(dictionary, filterDescriptors); } else if (rootFilterItem is Kendo.Mvc.FilterDescriptor) { Kendo.Mvc.FilterDescriptor simpleItem = (Kendo.Mvc.FilterDescriptor)rootFilterItem; DataSourceRequestValueExtensions.ExtractSimpleFilterDescriptorValues(dictionary, simpleItem); } return(dictionary); }
private static void ExtractCompositeFilterDescriptorValues(Dictionary <string, object> dictionary, Kendo.Mvc.Infrastructure.Implementation.FilterDescriptorCollection filterDescriptors) { foreach (var filterItem in filterDescriptors) { if (filterItem is Kendo.Mvc.CompositeFilterDescriptor) { var fDescriptors = (filterItem as Kendo.Mvc.CompositeFilterDescriptor).FilterDescriptors; ExtractCompositeFilterDescriptorValues(dictionary, fDescriptors); } else if (filterItem is Kendo.Mvc.FilterDescriptor) { var sItem = (Kendo.Mvc.FilterDescriptor)filterItem; ExtractSimpleFilterDescriptorValues(dictionary, sItem); } } }