XML file for the Cusom Filter Control <TextBlock Grid.Row="0" Margin="2" Text="Show Attributes of Discipline" /> <ListBox x:Name="m_oDisciplines" Grid.Row="1"> </ListBox> <StackPanel Orientation="Horizontal" Grid.Row="2"> <telerik:RadButton Name="m_oFilterButton" Content="Filter" Click="m_oFilterButton_Click" Margin="2" Width="80" /> <telerik:RadButton Name="m_oClearButton" Content="Clear" Click="m_oClearButton_Click" Margin="2" Width="80" /> </StackPanel> .CS file portion for the filter control is as below: public DisciplineFilterCtrl() { InitializeComponent(); CreateListBoxWithCheckBox(MetaDataCache.Cache.Disciplines); } private void CreateListBoxWithCheckBox(ObservableCollection<DisciplineWrapper> list) { List<ListBoxItem> listBoxItem = new List<ListBoxItem>(); foreach (DisciplineWrapper item in list) { if (item.Id != Guid.Empty && !item.Deleted) { ListBoxItem tempItem = new ListBoxItem(); CheckBox m_oCheckBox = new CheckBox(); m_oCheckBox.Content = item.Name; m_oCheckBox.Tag = item; tempItem.Content = m_oCheckBox; listBoxItem.Add(tempItem); } } m_oDisciplines.ItemsSource = listBoxItem; } private CompositeFilterDescriptor compositeFilter; private Telerik.Windows.Controls.GridViewBoundColumnBase column; private Telerik.Windows.Data.FilterDescriptor[] DisciplineFilter; private void CreateFilters() { compositeFilter = new CompositeFilterDescriptor(); compositeFilter.LogicalOperator = FilterCompositionLogicalOperator.Or; int count = MetaDataCache.Cache.Disciplines.Count; string dataMember = this.column.DataMemberBinding.Path.Path; DisciplineFilter = new FilterDescriptor[count]; for (int i = 0; i < count; i++) { this.DisciplineFilter[i] = new Telerik.Windows.Data.FilterDescriptor(dataMember , Telerik.Windows.Data.FilterOperator.Contains , null); compositeFilter.FilterDescriptors.Add(DisciplineFilter[i]); } compositeFilter.LogicalOperator = FilterCompositionLogicalOperator.Or; } public void Prepare(Telerik.Windows.Controls.GridViewBoundColumnBase column) { this.column = column as Telerik.Windows.Controls.GridViewBoundColumnBase; if (this.column == null) { return; } if (this.compositeFilter == null) { CreateFilters(); } } private void FilterRecord() { // this.compositeFilter.FilterDescriptors.Clear(); this.column.DataControl.FilterDescriptors.Clear(); int i = 0; List<ListBoxItem> listItems = this.m_oDisciplines.ItemsSource as List<ListBoxItem>; if (null != listItems) { foreach (var item in listItems) { CheckBox m_oCheckBox = item.Content as CheckBox; if (null != m_oCheckBox && m_oCheckBox.IsChecked.Value) { //this.compositeFilter.FilterDescriptors.Add(DisciplineFilter[i]); this.DisciplineFilter[i].Value = m_oCheckBox.Content; this.column.DataControl.FilterDescriptors.Add(DisciplineFilter[i]); i++; } } } } private void m_oFilterButton_Click(object sender, RoutedEventArgs e) { FilterRecord(); this.IsActive = true; }Hi,
I have created a custom filter control. In The filter control I am displaying a list of available options for the associated column.
The column may have a values separated by comma or newline.
For Example a Column value is "Electrical, Mechanical". The filter control has options listed as "Electrical" "Mechanica", "HVAC"..etc. If I select "Electrical" and "Mechanical" in the custom filter screen and click Filter, It should display me all the rows that contains "Electrical" or "Mechanical".
To achive this I have used a composite filter and set the logical operator to FilterCompositionLogicalOperator.Or
But it stil gives me the resulting rows where the column contains "Electrical" AND "Mechanical". Is there any way I could make it to display rows contaings data as "Electrical" OR "Mechanical".
Data Type for the source column is string.
Please help.
Thanks in advance