Quantcast
Channel: Telerik Forums RSS
Viewing all articles
Browse latest Browse all 78072

Trying to create custom filter for RadGridView

$
0
0

I'm trying to create a custom filter for a RadGridView, but no matter what I do I get the following error.

 

The value "(CategoryList Contains Allergies)" is not of type "Telerik.Windows.Data.IFilterDescriptor" and cannot be used in this generic collection.
Parameter name: value

 

The column that the filter is on contains a List<string> of possibly multiple category names in each row and the filter contains a distinct list of the categories.

 

001.publicpartialclassCategoryFilter : UserControl, IFilteringControl
002.{
003.    privateGridViewBoundColumnBase _column;
004. 
005.    publicdelegatevoidBeginCategoryChangeEvent();
006.    publiceventBeginCategoryChangeEvent BeginCategoryChange;
007. 
008.    publicdelegatevoidCategoryChangeEvent();
009.    publiceventCategoryChangeEvent CategoryChange;
010.    privateCompositeFilterDescriptor _compositeFilter;
011. 
012. 
013.    publicclassCategoryItem
014.    {
015.        publicstringCategoryName { get; set; }
016.        publicboolIsChecked { get; set; }
017.    }
018. 
019.    privateList<CategoryItem> MainCategoryList;
020. 
021.    /// <summary>
022.    /// Gets or sets a value indicating whether the filtering is active.
023.    /// </summary>
024.    publicboolIsActive
025.    {
026.        get{ return(bool)GetValue(IsActiveProperty); }
027.        set{ SetValue(IsActiveProperty, value); }
028.    }
029. 
030.    /// <summary>
031.    /// Identifies the <see cref="IsActive"/> dependency property.
032.    /// </summary>
033.    publicstaticreadonlyDependencyProperty IsActiveProperty =
034.        DependencyProperty.Register(
035.            "IsActive",
036.            typeof(bool),
037.            typeof(CategoryFilter),
038.            newSystem.Windows.PropertyMetadata(false));
039. 
040. 
041. 
042. 
043.    publicboolthis[stringCategoryName]
044.    {
045.        get
046.        {
047.            CategoryItem item = MainCategoryList.FirstOrDefault(i => i.CategoryName == CategoryName);
048. 
049.            if(item == null)
050.                thrownewException("Category Name not found");
051. 
052.            return(item.IsChecked);
053.        }
054.        set
055.        {
056.            CategoryItem item = MainCategoryList.FirstOrDefault(i => i.CategoryName == CategoryName);
057. 
058.            if(item == null)
059.                thrownewException("Category Name not found");
060. 
061.            item.IsChecked = value;
062.        }
063.    }
064. 
065.    [TypeConverter(typeof(String))]
066.    publicList<string> Categories
067.    {
068.        get
069.        {
070.            returnMainCategoryList.Where(i => i.IsChecked).Select(i => i.CategoryName).ToList();
071.        }
072.        set
073.        {
074.            foreach(CategoryItem item inMainCategoryList)
075.            {
076.                item.IsChecked = value.Contains(item.CategoryName);
077.            }
078.        }
079.    }
080. 
081.    publicSystem.Windows.Controls.ListBox CategoryList
082.    {
083.        get{ returnthis.LstCategories; }
084.    }
085. 
086.    publicCategoryFilter()
087.    {
088.        InitializeComponent();
089.    }
090. 
091.    publicvoidPrepare(GridViewColumn column)
092.    {
093.        this._column = column asGridViewBoundColumnBase;
094.        if(this._column == null)
095.        {
096.            return;
097.        }
098. 
099.        List<string> catList = ((List<EducationChoices>)(column.DataControl.ItemsSource))
100.            .SelectMany(l => l.CategoryList)
101.            .Distinct()
102.            .Where(l => (l ?? "")
103.                .Trim() != "")
104.            .OrderBy(c => c)
105.            .ToList();
106. 
107.        MainCategoryList = catList
108.                .Select(i => newCategoryItem() {CategoryName = i, IsChecked = false})
109.                .ToList();
110. 
111.        LstCategories.ItemsSource = MainCategoryList;
112.    }
113. 
114.    privatevoidChangeFilter(objectsender, RoutedEventArgs e) {
115.        BeginCategoryChange();
116. 
117.        if(_compositeFilter != null) {
118.            _column.DataControl.FilterDescriptors.Remove(_compositeFilter);
119.        }
120.        _compositeFilter = newCompositeFilterDescriptor { LogicalOperator = FilterCompositionLogicalOperator.Or };
121.        var dataMember = _column.DataMemberBinding.Path.Path;
122. 
123.        stringCategory = ((CheckBox)e.OriginalSource).Tag.ToString();
124. 
125.        foreach(var item inMainCategoryList) {
126.            if(item.IsChecked) {
127.                var filter = newFilterDescriptor(dataMember, FilterOperator.Contains, Category);
128.                _compositeFilter.FilterDescriptors.Add(filter);
129.            }
130.        }
131. 
132.        if((((CheckBox)e.OriginalSource).IsChecked ?? false) &&
133.                    _compositeFilter.FilterDescriptors.All(f => ((FilterDescriptor)f).Value.ToString() != Category))
134.        {
135.            var filter = newFilterDescriptor(dataMember, FilterOperator.Contains, Category);
136.            _compositeFilter.FilterDescriptors.Add(filter);
137.        } elseif(!(((CheckBox) e.OriginalSource).IsChecked ?? false) &&
138.                   _compositeFilter.FilterDescriptors.Any(f => ((FilterDescriptor) f).Value.ToString() == Category))
139.        {
140.            _compositeFilter.FilterDescriptors.Remove(
141.                _compositeFilter.FilterDescriptors.FirstOrDefault(
142.                    f => ((FilterDescriptor) f).Value.ToString() == Category));
143.        }
144.       
145. 
146.        if(!_column.DataControl.FilterDescriptors.Contains(_compositeFilter)) {
147.            _column.DataControl.FilterDescriptors.Add(_compositeFilter);
148.        }
149. 
150.        this.IsActive = true;
151. 
152.        CategoryChange();
153.    }
154.}

 

I found this thread and tried to figure out what it was doing, but it didn't help.


Viewing all articles
Browse latest Browse all 78072

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>