set default setting for filter

20 posts, 4 answers
  1. Naseem
    Naseem avatar
    70 posts
    Member since:
    Nov 2010

    Posted 07 Jul 2011 Link to this post

    Hi,

    I would like to set a default setting on filter panel. When ever filter opens automatically it set to 'Contain' instead of 'equal to' . I've found this post related to that.

    http://www.telerik.com/community/forums/silverlight/gridview/setting-a-default-value-for-the-filter.aspx

    I'm using the bellow code for that purpose. However it's just working on the first click . The first time it shows 'Contain' but the next times it's still 'equal to'

    ColumnFilterDescriptor numberColumnFilter = new ColumnFilterDescriptor((IDataFieldDescriptor)GridView.Columns[0]);
    numberColumnFilter.FieldFilter.Filter1.Operator = FilterOperator.Contains;
    GridView.FilterDescriptors.Add(numberColumnFilter);

    Please guide me what I'm doing wrong.

    Many thanks,
    Naseem
  2. Naseem
    Naseem avatar
    70 posts
    Member since:
    Nov 2010

    Posted 07 Jul 2011 Link to this post

    I've realized I need to put that piece of code in "FieldFilterEditorCreated" event.
    However I'm not sure whether there is any better solution or not ! 

    Thank you,
    Naseem
  3. Answer
    Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 07 Jul 2011 Link to this post

    Hi Naseem,

     Actually you will need to ovveride the Prepare method of the Filtering Control like it is shown in this forum post. There is a sample project posted by Ross that is doing exactly what you would like to achieve.
    You may as well review  this forum post.

    Best wishes,
    Didie
    the Telerik team

    Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

  4. Naseem
    Naseem avatar
    70 posts
    Member since:
    Nov 2010

    Posted 07 Jul 2011 Link to this post

    Hi Didie,
     
    Thank you the quick response. I'll do based on the post you have sent me , however I need to set the filter to be 'contain' in case type of column is String . otherwise if type of column is 'int', the filter still shoud be 'Equal to'. I was wondering how I can retrieve type of column or type of the source it has been binded to?

    Many Thanks,

    Kind Regards,
    Naseem
  5. Answer
    Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 11 Jul 2011 Link to this post

    Hi Naseem,

    Have you changed the filtering control already?

    You may get the type of the data bound to the column using the DataType property of the GridViewColumn, like so:

    (gridView.Columns[1] as Telerik.Windows.Controls.GridViewBoundColumnBase).DataType

    Does this help? 

    Regards,
    Didie
    the Telerik team

    Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

  6. Naseem
    Naseem avatar
    70 posts
    Member since:
    Nov 2010

    Posted 11 Jul 2011 Link to this post

    Hi Didie ,

    Thank you so much. Now it's working fine , just the only issue is the theme of Filtering control which is silver by default. I was wondering how I can change it to be OfficeBlue theme.

    var nameColumn = (GridViewBoundColumnBase)this.dgrdProduct.Columns[count];
    var customFilteringControl = new MyFilteringControl();
    nameColumn.FilteringControl = customFilteringControl;

    public class MyFilteringControl : FilteringControl
      {
          public override void Prepare(GridViewBoundColumnBase column)
          {
              base.Prepare(column);
              var vm = this.DataContext as FilteringViewModel;
                
              if (vm != null)
              {
                  if (!vm.Filter1.IsActive)
                  {
                      if (column.DataType.ToString().Contains("System.Int32"))
                      {
                          vm.Filter1.Operator = FilterOperator.IsEqualTo;
                      }
                      else
                      {
                          vm.Filter1.Operator = FilterOperator.Contains;
                      }
                  }
                  if (!vm.Filter2.IsActive)
                  {
                      if (column.DataType.ToString().Contains("System.Int32"))
                      {
                          vm.Filter2.Operator = FilterOperator.IsEqualTo;
                      }
                      else
                      {
                          vm.Filter2.Operator = FilterOperator.Contains;
                      }
                  }
              }
          }

    Many Thanks,
    I appreciate your help,

    Kind Regards,
    Naseem


     
  7. Answer
    Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 12 Jul 2011 Link to this post

    Hello Naseem,

    I am glad to hear that you have your scenario working fine.

    Regarding changing the theme of the Filtering control, you may review this help article about setting a theme? There is a detailed explanation on how to change the theme of a single control.

    Best wishes,
    Didie
    the Telerik team

    Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

  8. Naseem
    Naseem avatar
    70 posts
    Member since:
    Nov 2010

    Posted 12 Jul 2011 Link to this post

    Thank you so much Didie for all your help :)
  9. Naseem
    Naseem avatar
    70 posts
    Member since:
    Nov 2010

    Posted 12 Jul 2011 Link to this post

    Hello Didie,

    I have just realized there is an issue in my filtering control. I have implemented it based on the post you have sent me

    http://www.telerik.com/community/forums/wpf/gridview/hide-and-filtering-options.aspx

    for (int count = 0; count < dgrdProduct.Columns.Count; ++count)
               {
                   var nameColumn = (GridViewBoundColumnBase)this.dgrdProduct.Columns[count];
                   var customFilteringControl = new CustomFilteringControl();
                   nameColumn.FilteringControl = customFilteringControl;
               }

    I set the above code after GridView.ItemSource being set.It's working fine ,except on the first click . The first time ,it comes as 1.jpg and on the second click and then  it's similar to 2.jpg.

    I don't know why it's like that !
    Would you please guide me what I'm doing wrong,

    Many thanks,
    Naseem
  10. Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 15 Jul 2011 Link to this post

    Hello Naseem,

     I am a little bit confused. May you please clarify if I have understood you right:
    1. The 1.jpg is wrong
    2. The 2.jpg is right
    3. You have followed the example posted by Ross in the specified forum thread.
    4.Are you hiding the Text Boxes (as I have understood that you would like to change the filter operators)?

    May you please paste the related code of your CustomFilteringControl?

    Best wishes,
    Didie
    the Telerik team

    Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

  11. Naseem
    Naseem avatar
    70 posts
    Member since:
    Nov 2010

    Posted 17 Jul 2011 Link to this post

    Hi Didie,

    Sorry if my request wasn't clear enough . Here is the scenario:

    1. I'd like to change the filter control based on the column data type .
    2. if the type is string , the filtercontrol.filter1 dropdown list shows "Contain"
    3. if the type is int, the filtercontrol.filter1 dropdown list shows "Equal to"

    I have done that by using bellow approach

    http://www.telerik.com/community/forums/silverlight/gridview/setting-a-default-value-for-the-filter.aspx


    for (int count = 0; count < dgrdProduct.Columns.Count; ++count)
                {
                    var nameColumn = (GridViewBoundColumnBase)this.dgrdProduct.Columns[count];
                    var customFilteringControl = new CustomFilteringControl();
                    nameColumn.FilteringControl = customFilteringControl;
      
                }

    public class CustomFilteringControl : FilteringControl
        {
            public override void Prepare(GridViewBoundColumnBase column)
            {
                base.Prepare(column);
      
                Telerik.Windows.Controls.StyleManager.SetTheme(this, new Office_BlueTheme());
      
                var vm = this.DataContext as FilteringViewModel;
      
                if (vm != null)
                {
                    if (!vm.Filter1.IsActive)
                    {
                        if (column.DataType.ToString().Contains("System.Int"))
                        {
                            vm.Filter1.Operator = FilterOperator.IsEqualTo;
                        }
                        else
                        {
                            vm.Filter1.Operator = FilterOperator.Contains;
                        }
                    }
      
                    if (!vm.Filter2.IsActive)
                    {
                        if (column.DataType.ToString().Contains("System.Int"))
                        {
                            vm.Filter2.Operator = FilterOperator.IsEqualTo;
                        }
                        else
                        {
                            vm.Filter2.Operator = FilterOperator.Contains;
                        }
                    }
                }
            }

    Here is the issue:
    1.on the First Click (click on Filtering) it shows 1.jpg (which is wrong since it doesn't have the filtering text boxes)
    2.on the second click and from then on ,it shows 2.jpg.

    I'd be thankful let me know what I'm doing wrong.

    Many thanks,

    Naseem
  12. Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 20 Jul 2011 Link to this post

    Hello Naseem,

     I have created a sample project using all the sample code you have posted. The filtering Control seems to be shown the right way.

    Could you please review the project and then change it so that the wrong behavior occurs? 

    Best wishes,
    Didie
    the Telerik team

    Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

  13. Naseem
    Naseem avatar
    70 posts
    Member since:
    Nov 2010

    Posted 21 Jul 2011 Link to this post

    Hello Didie,

    Thank you for generating a sample for the scenario. I have realized what cause the issue. In my application, in class MyFilteringControl, in Prepare method, if I remove the line which is related to theme , it works fine .

    Telerik.Windows.Controls.StyleManager.SetTheme(this, new Office_BlueTheme());

    Or even if I choose OfficeBlack theme still it works fine and filter text boxes will appear from the begining.

    Even in your sample although it has been set with the Office blue theme , actually the result is still Silver color! In your sample the theme doesn't set to the filtering control .

    The issue is because of Theme , but I don't know how I can fix it , since I need to set it to have Office Blue theme.

    Many Thanks,

    Kind Regards,
    Naseem
  14. Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 22 Jul 2011 Link to this post

    Hello Naseem,

    Unfortunately I am not able to apply this theme and get the wrong result.  Are you changing the theme of the GridView as well?

    As I understand you change the Style of the entire filtering control, not just the filtering TextBoxes. If this is the case, may you please open a support ticket and send us a simple sample project?

    Greetings,
    Didie
    the Telerik team

    Register for the Q2 2011 What's New Webinar Week. Mark your calendar for the week starting July 18th and book your seat for a walk through of all the exciting stuff we will ship with the new release!

  15. Naseem
    Naseem avatar
    70 posts
    Member since:
    Nov 2010

    Posted 02 Aug 2011 Link to this post

    Hello Didie,

    I couldn't change the theme in your sample either. It's strange that with the same code the theme is changing in my code,not in yours!

    However since the issue comes when the theme is changing (I mean when i remove the line for theme changing the filter control shows properly) I'm thinking may be the way I have changed the theme or the place I have set the theme, is not right. I was wondering if there is any other way to set theme for custom filter control?

    public class CustomFilteringControl : FilteringControl
        {
            public override void Prepare(GridViewBoundColumnBase column)
            {
                base.Prepare(column);
      
                Telerik.Windows.Controls.StyleManager.SetTheme(this, new Office_BlueTheme());
      
                var vm = this.DataContext as FilteringViewModel;
      
                if (vm != null)
                {
                    if (!vm.Filter1.IsActive)
                    {
                        if (column.DataType.ToString().Contains("System.Int"))
                        {
                            vm.Filter1.Operator = FilterOperator.IsEqualTo;
                        }
                        else
                        {
                            vm.Filter1.Operator = FilterOperator.Contains;
                        }
                    }
      
                    if (!vm.Filter2.IsActive)
                    {
                        if (column.DataType.ToString().Contains("System.Int"))
                        {
                            vm.Filter2.Operator = FilterOperator.IsEqualTo;
                        }
                        else
                        {
                            vm.Filter2.Operator = FilterOperator.Contains;
                        }
                    }
                }
            }
        }

    Many thanks,

    Kind Regards,
    Naseem 
  16. Answer
    Rossen Hristov
    Admin
    Rossen Hristov avatar
    2477 posts

    Posted 03 Aug 2011 Link to this post

    Hi Naseem,

    You can do this in two ways:

    1) In the constructor:

    public class MyFilteringControl : FilteringControl
    {
        public MyFilteringControl()
        {
            // This will be needed if you define an application theme
            this.DefaultStyleKey = typeof(FilteringControl);
             
            // Here you can set the theme. You could also do this in XAML like this:
            Telerik.Windows.Controls.StyleManager.SetTheme(this, new Office_BlueTheme());
        }
     
        public override void Prepare(GridViewBoundColumnBase column)
        {
            base.Prepare(column);
     
            Debug.WriteLine("MyFilteringControl.Prepare");
        }
    }

    2) In XAML:

    <telerik:RadGridView Grid.Row="0"
                         Name="clubsGrid"
                         telerik:StyleManager.Theme="Office_Blue"
                         ItemsSource="{Binding Clubs}"
                         AutoGenerateColumns="False"
                         Margin="5">
        <telerik:RadGridView.Columns>
            <telerik:GridViewDataColumn DataMemberBinding="{Binding Name}">
                <telerik:GridViewDataColumn.FilteringControl>
                    <my:MyFilteringControl telerik:StyleManager.Theme="Office_Blue"/>
                </telerik:GridViewDataColumn.FilteringControl>                 
            </telerik:GridViewDataColumn>
        </telerik:RadGridView.Columns>
    </telerik:RadGridView>

    I have attached a sample project.

    Let me know if this does not help.

    Best wishes,
    Ross
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get now >>

  17. Naseem
    Naseem avatar
    70 posts
    Member since:
    Nov 2010

    Posted 04 Aug 2011 Link to this post

    Hi Didie,

    Your solution worked :) I needed to set the theme in constructor.

    Thank you so much for all your quick and helpful responses, I really appreciate it.

    Best Regards,
    Naseem
  18. klogand
    klogand avatar
    6 posts
    Member since:
    Oct 2012

    Posted 21 Sep 2011 Link to this post

    I tried your project and get the default selection changed, but I'm losing my custom implicit styling (the default style is being shown) that I've defined in a separate XAML resource dictionary. How can I use this approach and keep my styling? I'm using version 2011.2.712.1040.
  19. Dimitrina
    Admin
    Dimitrina avatar
    3769 posts

    Posted 26 Sep 2011 Link to this post

    Hello Klogand,

    We will need a little bit more information about your custom scenario. What is your custom styling? Do you apply it for the RadGridView, or for the FilteringControl?

    Do you set the theme the same way as it is set in the sample project?

    All the best,
    Didie
    the Telerik team

    Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

  20. klogand
    klogand avatar
    6 posts
    Member since:
    Oct 2012

    Posted 17 Feb 2012 Link to this post

    Thanks,

    This fell off the radar and I'm finally getting back to it, after we updated our controls to this version (2011.1.411.1040). I'm successfully hiding the Match case button in my custom style, but then when I apply the new CustomFilterControl as you described in the sample project zip above, the button comes back and the widths of the textbox change (see the attached before and after .jpgs). I have a FilteringControlStyle.xaml that overrides the default and uses an implicit style (the x:Key is not defined).

    Once I added a key in the style file and called this.Style = Application.Current.Resources["FilteringControlStyle"] as Style; at the end of the Prepare method, it worked correctly. So I found my work around and I'm satisfied. Thanks for the sample that got me going. The style must not get applied because the type is myNamespace.CustomizedFilteringControl instead of telerk:FilteringControl?

    It would be nice if the default could be set without overriding the whole control :-).
    <Style TargetType="telerik:FilteringControl" BasedOn="{StaticResource filteringControlBase}">
          <Setter Property="Template" Value="{StaticResource FilteringTextControlTemplate}" />
       </Style>
     
        <Style x:Key="FilteringControlStyle" TargetType="telerik:FilteringControl" BasedOn="{StaticResource filteringControlBase}">
            <Setter Property="Template" Value="{StaticResource FilteringTextControlTemplate}" />
        </Style>
Back to Top