Hey Telerik!
So, for now I just need two custom features for the filter control (filter row mode):
- first is a bit complex: I need to deferred filter at the very moment the user first clicks on the funnel filter icon. The second times he clicks it, it should display the default filter popup. So basically: user types on filter, nothing happens -> user clicks on the icon, it filters -> user click it once more, opens the popup
- now second is: I need to reduce the amount of information from inside that popup for a more friendly GUI of it
if you have an answer for either of those, please let me know asap, as my trial period is about to end!
Thank you, I am really enjoying telerik support so far!
5 Answers, 1 is accepted
Let me go straight to your questions:
1. I am afraid that this is not supported out-of-the-box. The closest solution for this is to Change the Default Selected Filter Operator. In this way when you click the funnel it will filter using the new filter operator.
2. I have already answered the other forum thread. However, if you are usng FilterMode=FilterRow then you need to Remove Some of the Available Filter Operators. In this way you will limit the items displayed in the popup.
Regards,
Yoan
Telerik
thank you for your answer, Yoan.
Regarding the solution for the second point, is it possible to have a central style so that every grid will use it by default?
so that I won't keep repeating that code all the time
thank you!
The way to go is with an Attached behavior. You will write the attached behavior only once. This attached behavior will attach to the event and will remove the operators. Here is a very nice article about event handling with attached behaviors.
Regards,
Yoan
Telerik
Hi Yoan
that approach is brilliant. but I do not see why my breakpoints inside that behavior class wont even hit
please help!
here is some code:
XAML:
<telerik:RadGridView Name="RadGridView" ItemsSource="{Binding View}" IsReadOnly="True" Style="{StaticResource VitorStyle}" AutoGenerateColumns="False" MouseMove="RadGridView_MouseMove">Dictionary (resource file):
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:my="clr-namespace:HierarchyIsExpandable" xmlns:u="clr-namespace:TelerikVirtualization.Utils" xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" > <Style x:Key="VitorStyle" TargetType="telerik:RadGridView" > <Setter Property="AutoGenerateColumns" Value="False"></Setter> <Setter Property="FilteringMode" Value="FilterRow"></Setter> <Setter Property="ControlPanelItems"> <Setter.Value> <telerik:ControlPanelItemCollection> <telerik:ControlPanelItem ButtonTooltip="Column chooser" > <telerik:ControlPanelItem.ContentTemplate> <DataTemplate> <ListBox ItemsSource="{Binding Columns}" BorderThickness="0"> <ListBox.ItemTemplate> <DataTemplate> <CheckBox Content="{Binding Header, Mode=OneWay}" IsChecked="{Binding IsVisible, Mode=TwoWay}" /> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </DataTemplate> </telerik:ControlPanelItem.ContentTemplate> </telerik:ControlPanelItem> </telerik:ControlPanelItemCollection> </Setter.Value> </Setter> </Style> <Style TargetType="telerik:RadGridView"> <Setter Property="u:GridFilterBehavior.IsEnabled" Value="true" /> </Style></ResourceDictionary>Behavior class:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows;using Telerik.Windows.Controls;using Telerik.Windows.Data;namespace TelerikVirtualization.Utils{ public class GridFilterBehavior : DependencyObject { public static readonly DependencyProperty IsEnabledProperty; static GridFilterBehavior() { IsEnabledProperty = DependencyProperty.RegisterAttached( "IsEnabled", //Name of the property typeof(bool),//Type of the attached property typeof(GridFilterBehavior),//Type of the class that provides the property new FrameworkPropertyMetadata(false, OnBehaviorEnabled)); //Default value } public bool IsEnabled { get { return (bool)this.GetValue(IsEnabledProperty); } set { SetValue(IsEnabledProperty, value); } } public static void OnBehaviorEnabled( DependencyObject dependencyObject, DependencyPropertyChangedEventArgs args) { RadGridView gridview = (RadGridView)dependencyObject; gridview.FilterOperatorsLoading += (s, e) => { if (e.Column.UniqueName == "Name") { e.AvailableOperators.Remove(FilterOperator.IsEqualTo); e.AvailableOperators.Remove(FilterOperator.IsNotEqualTo); e.AvailableOperators.Remove(FilterOperator.IsGreaterThanOrEqualTo); e.AvailableOperators.Remove(FilterOperator.IsLessThanOrEqualTo); e.AvailableOperators.Remove(FilterOperator.IsNull); e.AvailableOperators.Remove(FilterOperator.Contains); e.DefaultOperator1 = FilterOperator.IsGreaterThan; e.DefaultOperator2 = FilterOperator.IsLessThan; } }; } }}
thank you
I am sending you a sample project which demonstrates the suggested approach. Please review it and let me know how it works at your end.
Regards,
Yoan
Telerik