Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
295
How can i override the special filter operands "Blanks", "NonBlanks" ?
posted

hi,

first: we use infragistics xamdatagrid 11.1.20111.2053

our problem:

We use the grid with generic lists. So it's very dynamic and must be prepared for any situation. We set for each field type theSortComparer, FilterComparer, the editor type, Edita type and style editor.
For some properties of a model, we use special TypeConverter.
For example, in a cell, some values ??can not be displayed.

0 = string.Empty
1 = 1
2 = 2

first solution, we only use the type converter and a special sort comparer:

public class HideZeroIntEntryConverter : Int32Converter
{
  public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
    if (value is int) {
      if (destinationType == typeof(string)) {
        return ((int)value != 0) ? value.ToString() : string.Empty;
      }
      return ((int)value != 0) ? value : Binding.DoNothing; // this is the best solution to tell the grid the cell is empty
    }
    return base.ConvertTo(context, culture, value, destinationType);
  }
}

this works perfect if we not decide to filter, if we want to filter the values we see the ugly "Binding.DoNothing" in the filter drop down items.
also, we can not filter for "0" because we the converter says string.empty...

second solution, we use a special XamTextEditor:

public class HideZeroIntEntryTextEditor : XamTextEditor
{
  public HideZeroIntEntryTextEditor() {
    this.ValueToDisplayTextConverter = new HideZeroIntEntryValueConverter();
  }
}

public class HideZeroIntEntryValueConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
    if (value is int) {
      if (targetType == typeof(string)) {
        return ((int)value != 0) ? value.ToString() : string.Empty;
      }
      // this never happens
      return ((int)value != 0) ? value : Binding.DoNothing;
    }
    // this never happens
    return targetType == typeof(string) && value != null ? value.ToString() : value;
  }
}

and for the field settings

field.Settings.EditAsType = typeof(int);

  field.Converter = null;
  field.Settings.EditorType = typeof(HideZeroIntEntryTextEditor);
  field.Settings.SortComparer = GenericComparer<int>.Instance;
  field.Settings.FilterComparer = GenericComparer<int>.Instance;
  field.Settings.GroupByComparer = GroupByRecordComparer<int>.Instance;

Now we can filter to "0", even if this does not appear in the list.

But, in both cases, we can not filter by empty entries, because it actually does not exist!
We want to though!
In our opinion, this could be if we could make our own special filter. But this is unfortunately not so easy.
Yes, we can remove the special filter blanks and NonBlanks, BUT that applies to all grids.
A special filter to override is very complicated and does not even correct.

If

What can we do, any ideas?

Best regards.