If you want to filter a column that is data-bound to a custom type, you need to make sure that your custom type meets certain criteria. We will use the type Person as an example.
The first thing that you need to do is implement the IEquatable<T> interface. It has a single method called Equals.
Next, you need to override Object.Equals(Object) and Object.GetHashCode. MSDN states that if you implement IEquatable<T>, you should also override the base class implementations of Object.Equals(Object) and Object.GetHashCode so that their behavior is consistent with that of the IEquatable<T>.Equals method. If you do override Object.Equals(Object), your overridden implementation is also called in calls to the static Equals(System.Object, System.Object) method on your class. This ensures that all invocations of the Equals method return consistent results. Furthermore, the GetHashCode method will be used by the framework when the distinct values need to be discovered.
You need to override the ToString method of your type so that distinct values and grid cells display a friendly representation of your class.
When RadGridView encounters a custom type it will use a plain TextBox for the field filter editors. The strings that user enters have to be converted to your custom type and vice versa. This can be achieved by specifying a TypeConverter on your class.
If the plain TextBox does not suit your needs, you can provide your own field filter editor by overriding the GridViewColumn.CreateFieldFilterEditor method. You will no longer need a TypeConverter if your custom field filter editor is able to produce instances of your custom type. You only need to data-bind your editor’s significant property to a property called Value residing on its DataContext. The UnsetValue singleton is used for deactivating a filter. Here is what a custom field filter editor may look like:
If you want to see the comparison filter operators (Is Less Than, etc.) you should override your custom type’s comparison operators.
This is all you need to do in order to enable filtering for your custom type.
Subscribe to be the first to get our expert-written articles and tutorials for developers!