Last Updated: 24 Aug 2015 13:05 by ADMIN
Dess | Tech Support Engineer, Principal
Created on: 11 Nov 2014 09:04
Category: GridView
Type: Bug Report
FIX. RadGridView - FormatException when filtering and a GridViewCheckBoxColumn is available with custom TypeConverter
Note: InvalidCastException in case of converting Char to Boolean.

To reproduce: use the following code snippet:

public Form1()

    DataTable dt = new DataTable();
    dt.Columns.Add("Id", typeof(string));
    dt.Columns.Add("Name", typeof(string));
    dt.Columns.Add("Active", typeof(string));

    dt.Rows.Add("1", "Item1", "Y");
    dt.Rows.Add("2", "Item2", "N");

    this.radGridView1.DataSource = dt;
    GridViewCheckBoxColumn checkBoxColumn = new GridViewCheckBoxColumn();
    checkBoxColumn.FieldName = "Active";
    checkBoxColumn.DataTypeConverter = new ToggleStateConverter();
    radGridView1.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill;
    radGridView1.EnableFiltering = true;

public class ToggleStateConverter : TypeConverter
    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        return destinationType == typeof(ToggleState);

    public override object ConvertTo(ITypeDescriptorContext context, 
        CultureInfo culture, object value, Type destinationType)
        string charValue = value + "";

        switch (charValue)
            case "Y":
                return ToggleState.On;
            case "N":
                return ToggleState.Off;
            case "M":
                return ToggleState.Indeterminate;

        return base.ConvertTo(context, culture, value, destinationType);

    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        return sourceType == typeof(ToggleState);

    public override object ConvertFrom(ITypeDescriptorContext context, 
        CultureInfo culture, object value)
        ToggleState state = (ToggleState)value;

        switch (state)
            case ToggleState.On:
                return "Y";
            case ToggleState.Off:
                return "N";
            case ToggleState.Indeterminate:
                return "M";

        return base.ConvertFrom(context, culture, value);

Try to filter by "Name" column. As a result FormatException  occurs because of inability to convert "Y"/"N" to Boolean although a custom TypeConverter is implemented to handle it.