Rows do not show up in grid after clearing filter text

5 posts, 1 answers
  1. Randy
    Randy avatar
    19 posts
    Member since:
    Oct 2012

    Posted 21 Jun 2013 Link to this post

    I am using a combination of normal and custom filtering in the RadGridView control.  When the user clears the text out of a filter box in the filtering row the grid still filters as if the box still had text in it.

    In the attached image you can see that two rows show up in the grid initially.

    After the filter value Contains "T" is entered the first row is correctly filtered.

    When I clear that filter box the first row remains hidden.  The only way to get the grid to show the row again is to set the filter type to "No Filter" and then back to "Contains".

    Here is the sample code:
    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
     
                radGridView1.CustomFiltering += radGridView1_CustomFiltering;
            }
     
            private void Form1_Load(object sender, EventArgs e)
            {
                radGridView1.MasterTemplate.Columns.Clear();
                 
                GridViewTextBoxColumn v1Col = new GridViewTextBoxColumn("Value1");
                v1Col.Name = "Value1";
                radGridView1.MasterTemplate.Columns.Add(v1Col);
     
                GridViewTextBoxColumn v2Col = new GridViewTextBoxColumn("Value2");
                v2Col.Name = "Value2";
                radGridView1.MasterTemplate.Columns.Add(v2Col);
     
                radGridView1.MasterTemplate.EnableFiltering = true;
                radGridView1.MasterTemplate.EnableCustomFiltering = true;
                radGridView1.MasterTemplate.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
     
                BindingList<Thing> stuff = new BindingList<Thing>();
                stuff.Add(new Thing("One", "Two"));
                stuff.Add(new Thing("Filter", "Two"));
                stuff.Add(new Thing("Three", "Four"));
     
                radGridView1.DataSource = stuff;
            }
     
            private void radGridView1_CustomFiltering(object sender, Telerik.WinControls.UI.GridViewCustomFilteringEventArgs e)
            {
                if ((e.Row.DataBoundItem as Thing).Value1 == "Filter")
                {
                    e.Visible = false;
                }
                e.Handled = !e.Visible;
            }
        }
     
        public class Thing
        {
            public string Value1 { get; set; }
            public string Value2 { get; set; }
     
            public Thing(string val1, string val2)
            {
                Value1 = val1;
                Value2 = val2;
            }
        }
  2. Answer
    Ivan Petrov
    Admin
    Ivan Petrov avatar
    717 posts

    Posted 26 Jun 2013 Link to this post

    Hello Randy,

    Thank you for writing.

    Thanks to your code I was able to quickly reproduce the issue. I can confirm that it is an issue in the filtering mechanism of RadGridView and I have logged it in our Public Issue Tracking System - PITS. You can track its progress, subscribe for status changes and add your vote/comment to it on the following link - PITS Issue. To workaround the issue you can remove the filtering when the user deletes the text inside the filter cell. Here is how to achieve that:
    this.radGridView1.ValueChanging += radGridView1_ValueChanging;
     
    private void radGridView1_ValueChanging(object sender, ValueChangingEventArgs e)
    {
        if (this.radGridView1.CurrentColumn.Name == "Value1" && Convert.ToString(e.NewValue) == String.Empty)
        {
            int i = 0;
     
            while (i < this.radGridView1.FilterDescriptors.Count)
            {
                if (this.radGridView1.FilterDescriptors[i].PropertyName == "Value1")
                {
                    this.radGridView1.FilterDescriptors.RemoveAt(i);
                    continue;
                }
     
                i++;
            }
        }
    }

    I have also updated your Telerik Points for bringing this issue to our attention.

    I hope this will be useful. Should you have further questions, I would be glad to help.

    Regards,
    Ivan Petrov
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WINFORMS.
    Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
    Sign up for Free application insights >>
  3. Randy
    Randy avatar
    19 posts
    Member since:
    Oct 2012

    Posted 27 Jun 2013 Link to this post

    Thank you for the response.  Your answer did fix the issue, however I went with a slightly more generic approach.

    private void grid_ValueChanging(object sender, ValueChangingEventArgs e)
            {
                if (grid.CurrentRow is GridViewFilteringRowInfo && Convert.ToString(e.NewValue) == String.Empty)
                {
                    int i = 0;
     
                    while (i < grid.FilterDescriptors.Count)
                    {
                        if (grid.FilterDescriptors[i].PropertyName == grid.CurrentColumn.Name)
                        {
                            grid.FilterDescriptors.RemoveAt(i);
                            continue;
                        }
     
                        i++;
                    }
                }
            }
  4. Mateusz
    Mateusz avatar
    14 posts
    Member since:
    Jul 2012

    Posted 19 Jul 2013 Link to this post

    Hi there, 

    I do not want to create a new topic, as my problem is similar to your's. 

    If I create a DataSet and fill it with data using the following SQL query:

    SELECT 'Something' AS Name
    UNION ALL
    SELECT 'Something'
    UNION ALL
    SELECT 'Something2'
    UNION ALL
    SELECT ''
    UNION ALL
    SELECT ''

    it is impossible to filer (with filter box's "not equal to" or "equal to" options) "empty" values in order to see <> '' or = '' records.
    However, if you click the filter box, type anything in,erase it and then click on filter image to choose "equal to" or "not equal to" options, values will be filtered perfectly. 
    The question is, if it is possible to filter it without typing and erasing values ? What value is stored in filter's text box by default, that it is impossible to filter it properly at the beginning?

    Thanks in advance.

    Regards,
    Mateusz
  5. Ivan Petrov
    Admin
    Ivan Petrov avatar
    717 posts

    Posted 24 Jul 2013 Link to this post

    Hi Mateusz,

    Thank you for writing.

    Initially when the grid is shown the filter descriptors collection of RadGridView is empty. When you input a letter in the filter text field a new filter descriptor is created. From that point on when you continue to type letters or you delete the text the value of this filter descriptor is updated. When you delete the text the value of the filter is an empty string. You can set this as the initial value for the filter by adding a FilterDescriptor with this value.

    I hope this will be useful. Feel free to write back with further questions.

    Regards,
    Ivan Petrov
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for WINFORMS.
    Learn what features your users use (or don't use) in your application. Know your audience. Target it better. Develop wisely.
    Sign up for Free application insights >>
Back to Top