or

<telerik:RadGridView.GroupHeaderTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <CheckBox Click="RadGridViewGroupRowClicked" Margin="0 0 3 0"/> <TextBlock Text="{Binding Group.Key}" /> </StackPanel> </DataTemplate> </telerik:RadGridView.GroupHeaderTemplate> private void RadGridViewGroupRowClicked(object sender, System.Windows.RoutedEventArgs e) { var groupViewModel = (sender as CheckBox).DataContext as GroupViewModel; var isChecked = (bool) (sender as CheckBox).IsChecked; CheckUncheckRows(isChecked, groupViewModel); } public void CheckUncheckRows(bool isChecked, GroupViewModel groupViewModel) { CheckUncheckItems(isChecked, groupViewModel.Group); } public void CheckUncheckItems(bool isChecked, IGroup group) { if (group.HasSubgroups) { foreach (var subgroup in group.Subgroups) { CheckUncheckItems(isChecked, subgroup); } } else { foreach (var item in group.Items) { if (isChecked) { baseToTargetGridView.SelectedItems.Add(item); } else { baseToTargetGridView.SelectedItems.Remove(item); } } } }
What I try to achieve is to apply a filter to my RadGridView whenever user checks / unchecks a checkbox (pretty straightforward, right?). My code works fine when I set the AutoGenerateColumns flag of my gridview to True, but does nothing when I switch the flag to False (the IsActive flag of my ColumnFilterDescriptor never changes to True). I need to apply a specific template to my columns so the AutoGenerateColumns flag has to be False. Both of the columns I try to filter have the IsFilterable flag to True and are binded to a string (and not a custom defined class). Here is my RadGridView:
<Merging:RadGridViewWithSelectedItemsEditable x:Name="SelectedUserAttributesGridView" Grid.Row="0" ItemsSource="{Binding MergeDetailsViewModel}" AutoGenerateColumns="False" VerticalAlignment="Top" CanUserDeleteRows="False" CanUserFreezeColumns="False" SelectionMode="Extended" ScrollMode="Deferred" CanUserInsertRows="False" CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserSelect="False" CanUserSortColumns="False" ShowGroupPanel="False" FrozenColumnsSplitterVisibility="Hidden" GridLinesVisibility="None" RowIndicatorVisibility="Collapsed" IsEnabled="{Binding MergeDetailsEnabled}">
<Merging:RadGridViewWithSelectedItemsEditable.Columns> <telerik:GridViewColumn Header="Well"> <telerik:GridViewColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center" Margin="3,0,3,0" Text="{Binding WellName}" /> </DataTemplate> </telerik:GridViewColumn.CellTemplate> </telerik:GridViewColumn> <telerik:GridViewColumn Header="UWI"> <telerik:GridViewColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center" Margin="3,0,3,0" Text="{Binding UWI}" /> </DataTemplate> </telerik:GridViewColumn.CellTemplate> </telerik:GridViewColumn> <telerik:GridViewColumn Header="{Binding SelectedAttributes[0].Name}" IsFilterable="True"> <telerik:GridViewColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center" Margin="3,0,3,0" Text="{Binding FirstSelectedAttributeValue}" /> </DataTemplate> </telerik:GridViewColumn.CellTemplate> </telerik:GridViewColumn> <telerik:GridViewColumn Header="{Binding SelectedAttributes[1].Name}" IsFilterable="True"> <telerik:GridViewColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center" Margin="3,0,3,0" Text="{Binding SecondSelectedAttributeValue}" /> </DataTemplate> </telerik:GridViewColumn.CellTemplate> </telerik:GridViewColumn> <telerik:GridViewColumn Header="Preview"> <telerik:GridViewColumn.CellTemplate> <DataTemplate> <TextBlock VerticalAlignment="Center" Margin="3,0,3,0" Text="{Binding Preview}" /> </DataTemplate> </telerik:GridViewColumn.CellTemplate> </telerik:GridViewColumn> </Merging:RadGridViewWithSelectedItemsEditable.Columns> </Merging:RadGridViewWithSelectedItemsEditable>private void CheckBoxClicked(object sender, RoutedEventArgs e) { if (ShowHideNullValuesButton.IsChecked != null && (bool)ShowHideNullValuesButton.IsChecked) { ApplyNonNullFilter(2); ApplyNonNullFilter(3); } else SelectedUserAttributesGridView.FilterDescriptors.Clear(); } private void ApplyNonNullFilter(int columnIndex) { Telerik.Windows.Controls.GridViewColumn attributeValueColumn = SelectedUserAttributesGridView.Columns[columnIndex]; IColumnFilterDescriptor attributeValueColumnFilter = attributeValueColumn.ColumnFilterDescriptor; attributeValueColumnFilter.SuspendNotifications(); attributeValueColumnFilter.FieldFilter.Filter1.Operator = FilterOperator.IsNotEqualTo; attributeValueColumnFilter.FieldFilter.Filter1.Value = "NaN"; attributeValueColumnFilter.FieldFilter.Filter1.IsCaseSensitive = true; attributeValueColumnFilter.ResumeNotifications(); }
