Header filter shows wrong values

8 posts, 0 answers
  1. Ernesto
    Ernesto avatar
    3 posts
    Member since:
    Oct 2013

    Posted 09 Oct 2013 Link to this post

    Hello,
    I have the following column to show a dropdown list to users with options "Yes", "No" or "N/A" and it is bound to a bool? property using a converter class that transforms the literals to true or false and for null values "N/A".

    Here is the column definition:

    <telerik:GridViewComboBoxColumn x:Name="BoolCol"

    Width="165"

    UniqueName="BoolCol"

    DataMemberBinding="{Binding BoolCol, Mode=TwoWay, Converter={StaticResource BooleanToStringConverter}}"

    DisplayMemberPath="Key"

    SelectedValueMemberPath="Value"

    Header="Bool Col">

    </telerik:GridViewComboBoxColumn>


    Here is the converter class:

    public class BooleanToStringConverter : IValueConverter

    {

    static public string[] DefaultValues = new string[] { "Yes", "No", "N/A" };

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

    {

    var arr = (null != parameter) ? parameter.ToString().Split(',', ';', '|', '/')

    : DefaultValues;

    if (arr.Length != 3) { arr = DefaultValues; }

    if (value is bool)

    {

    return (bool)value ? arr[0] : arr[1];

    }

    else

    {

    return arr[2];

    }

    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

    {

    var arr = (null != parameter) ? parameter.ToString().Split(',', ';', '|', '/')

    : DefaultValues;

    if (arr.Length != 3) { arr = DefaultValues; }

    if (string.Equals((value ?? "").ToString(), arr[2], StringComparison.CurrentCultureIgnoreCase))

    {

    return null;

    }

    return string.Equals((value ?? "").ToString(), arr[0], StringComparison.CurrentCultureIgnoreCase);

    }

    }


    The ItemsSource is set on the constructor like this:

    var BoolCol = (DataGrid.Columns["BoolCol"] as GridViewComboBoxColumn);

    BoolCol.DataType = typeof(System.Nullable<bool>);

    BoolCol.ItemsSource = new Dictionary<string, string>() { { "Yes", "Yes"},

    { "No", "No" },

    { "N/A", "N/A"}};


    This works fine except that when the user tries to filter by clicking on the column header... the resulting list shows 3 options as expected but instead of showing the values "Yes", "No" or "N/A" it only shows "N/A" an all 3 options.
    It is even more puzzling that when you check on any of the options (which all read "N/A") it correctly filters by the right option.... The first one on the array is "Yes" so if you check for the first one it will filter the data for all the true values even if the dropdown on the filter reads "N/A".

    Any advices??

    Thanks

  2. Rossen Hristov
    Admin
    Rossen Hristov avatar
    2478 posts

    Posted 10 Oct 2013 Link to this post

    Hi,

    Filtering is a data operation. Extrating the distinct values from the source collection is also a data operation. Data operations are performed over the actual raw data with LINQ queries. IValueConverters and DataStringFormats are UI stuff and they play absolutely no part in the data operations. Presentation and data are two separate things.

    You can learn more about what filtering is and how it is performed by those articles:

    Basic Filtering
    Programmatic Filtering
    Column Filtering

    If your collection does not contain all distinct values that you want to diplsay you can alter the distinct values by attaching to the DistinctValuesLoading event of the grid which is also described in the documentation.

    I hope this helps.

    Regards,
    Rossen Hristov
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for SILVERLIGHT.
    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. DevCraft banner
  4. Ernesto
    Ernesto avatar
    3 posts
    Member since:
    Oct 2013

    Posted 10 Oct 2013 Link to this post

    Thanks Rossen, I understand your explanation and seems very logical... but I am passing the right values and I find not explanation of why the unique values list shown on the filter dropdown are all "N\A" and when you click on any of them the filter is applied for the right value (true or false) .
    This seems to me like a bug on the Telerik side
  5. Rossen Hristov
    Admin
    Rossen Hristov avatar
    2478 posts

    Posted 10 Oct 2013 Link to this post

    Hello,

    You have set your column's DataType to be Nullable<bool>, right? Yet you feed the combo box with strings only:

    BoolCol.ItemsSource = new Dictionary<string, string>() { { "Yes", "Yes"},

    { "No", "No" },

    { "N/A", "N/A"}};

    There are no bools in your combo box. So how can this combo provide a boolean value for the Binding. It can't. Hence your IValueConverter does nothing and always defaults to the third choice You can debug it to see.

    Please respect .NET types -- Nullable<bool> and string are different types. Make sure you have set up your combo correctly by following the documentation.

    Regards,

    Rossen Hristov
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for SILVERLIGHT.
    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 >>
  6. Ernesto
    Ernesto avatar
    3 posts
    Member since:
    Oct 2013

    Posted 11 Oct 2013 Link to this post

    Hello Rossen,
    Thanks for your answer... it is a good point that you bring on except that the filtering DOES WORK... it will be nice if you copy and paste the code I posted to see the real issue... the filtering works but the dropdown does not show the proper values... you check any of the options and the filter is applied for the right value.

    Being a bit more clear:
    Option on the Drop Down                     Item on the Array                 Output because of the Converter         Filter Applied on the Data
                    "N/A"                                               "Yes"                                            true                                        All items field value is true
                    "N/A"                                                "No"                                            false                                       All items field value is false
                    "N/A"                                               "N/A"                                            null                                         All items field value is null

    The issue is that the option on the drop down for the column filter should be like the item on the Array and it does not.

    Sorry if I am being a bit stubborn here... really I just want an explanation and solve the issue.. the only thing that I see not working is the dropdown showing wrong values and
    I have tried also setting the array with bool? 

    Thanks
  7. Rossen Hristov
    Admin
    Rossen Hristov avatar
    2478 posts

    Posted 14 Oct 2013 Link to this post

    Hi,

    Please, open a new support ticket and attach a runnable dummy sample project which demonstrates the issues that you are having. I will debug it and see what is going on.

    Thank you.

    Regards,
    Rossen Hristov
    Telerik
    TRY TELERIK'S NEWEST PRODUCT - EQATEC APPLICATION ANALYTICS for SILVERLIGHT.
    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 >>
  8. Nguyễn
    Nguyễn avatar
    1 posts
    Member since:
    May 2014

    Posted 28 May 2014 in reply to Rossen Hristov Link to this post

    I met the same thing. :(
  9. Boris
    Admin
    Boris avatar
    276 posts

    Posted 31 May 2014 Link to this post

    Hello Nguyễn,

    In order to understand your scenario better, could you please send us a small isolated project that demonstrates the issue? 


    Regards,
    Boris Penev
    Telerik
     
    Check out Telerik Analytics, the service which allows developers to discover app usage patterns, analyze user data, log exceptions, solve problems and profile application performance at run time. Watch the videos and start improving your app based on facts, not hunches.
     
Back to Top
DevCraft banner