I have a grid which has to be filtered programatically based on user entry. More than one column has to be filtered and each column may have more than 1 value to be filtered upon. Like say, Col1, Col2, Col7, Col8 has to be filtered on {1,4}, {1,38}, {78,65} & {1,0} respectively.
I have written the below code for this but looks like it filters only on the last set of values i.e. 4,38,65,0.
I have written the below code for this but looks like it filters only on the last set of values i.e. 4,38,65,0.
public
static
void
SetGridFilterComposite(RadGridView gridView, Dictionary<
string
, List<
int
>> filterValues)
{
CompositeFilterDescriptor mainDescriptor =
new
CompositeFilterDescriptor();
List<
int
> values =
null
;
if
(filterValues ==
null
|| filterValues.Count == 0)
return
;
ClearGridFilterColumns(gridView);
foreach
(
string
column
in
filterValues.Keys)
{
CompositeFilterDescriptor columnDescriptor =
new
CompositeFilterDescriptor();
if
(gridView.Columns.Contains(column))
{
values = filterValues[column];
FilterDescriptor filterDescriptor =
new
FilterDescriptor();
foreach
(
int
value
in
values)
{
filterDescriptor.PropertyName = column;
filterDescriptor.Operator = FilterOperator.IsEqualTo;
filterDescriptor.Value = value;
columnDescriptor.FilterDescriptors.Add(filterDescriptor);
}
columnDescriptor.LogicalOperator = FilterLogicalOperator.Or;
mainDescriptor.FilterDescriptors.Add(columnDescriptor);
}
}
mainDescriptor.LogicalOperator = FilterLogicalOperator.And;
mainDescriptor.IsFilterEditor =
true
;
gridView.FilterDescriptors.Add(mainDescriptor);
}