Steps to reproduce:
1) Add RadGridView control
2) Add GridViewTextBoxColumn
2) Enable filtering:
this.radGridView1.EnableFiltering = true;
3) Programmatically set filter descriptor:
FilterDescriptor filter = new FilterDescriptor();
filter.PropertyName = "TextBoxColumn";
filter.Operator = FilterOperator.IsEqualTo;
filter.IsFilterEditor = true;
this.radGridView1.FilterDescriptors.Add(filter);
Expected result: the default FilterDescriptor is changed from Contains to IsEqual
Actual result: can not set the default FilterDescriptor from Contains to IsEqual operator to a TextBoxColumn
Workaround:
private void OnFilterExpressionChanged(object sender, FilterExpressionChangedEventArgs e)
{
GridViewTemplate owner = sender as GridViewTemplate;
List<string> filterExpressions = new List<string>();
for (int i = 0; i < owner.FilterDescriptors.Count; i++)
{
FilterDescriptor descriptor = owner.FilterDescriptors[i];
string expression = null;
CompositeFilterDescriptor compositeFilterDescriptor = descriptor as CompositeFilterDescriptor;
if (compositeFilterDescriptor != null)
{
foreach (FilterDescriptor filterDescriptor in compositeFilterDescriptor.FilterDescriptors)
{
if (string.IsNullOrEmpty(filterDescriptor.PropertyName) ||
owner.Columns[filterDescriptor.PropertyName] == null)
{
continue;
}
}
expression = CompositeFilterDescriptor.GetCompositeExpression(compositeFilterDescriptor);
}
else
{
if (string.IsNullOrEmpty(descriptor.PropertyName) ||
owner.Columns[descriptor.PropertyName] == null)
{
continue;
}
if (descriptor.Value == null && (descriptor.Operator == FilterOperator.IsNotEqualTo || descriptor.Operator == FilterOperator.IsEqualTo))
{
expression = string.Empty;
}
else
{
expression = descriptor.Expression;
}
}
if (!string.IsNullOrEmpty(expression))
{
filterExpressions.Add(expression);
}
}
string logicalOperator = (owner.FilterDescriptors.LogicalOperator == FilterLogicalOperator.And) ? " AND " : " OR ";
string resultExpression = String.Join(logicalOperator, filterExpressions.ToArray());
e.FilterExpression = resultExpression;
}