this is the part which normally must filter the data
protected void Store1_RefreshData(object sender, StoreRefreshDataEventArgs e)
{
List<MyDvpt> list1 = new List<MyDvpt>();
string s = e.Parameters["gridfilters"];
//-- start filtering ------------------------------------------------------------
if (!string.IsNullOrEmpty(s))
{
FilterConditions fc = new FilterConditions(s);
foreach (FilterCondition condition in fc.Conditions)
{
Comparison comparison = condition.Comparison;
string field = condition.Name;
FilterType type = condition.FilterType;
object value;
switch (condition.FilterType)
{
case FilterType.Boolean:
value = condition.ValueAsBoolean;
break;
case FilterType.Date:
value = condition.ValueAsDate;
break;
case FilterType.List:
value = condition.ValuesList;
break;
case FilterType.Numeric:
if (list1.Count > 0 && list1[0].GetType().GetProperty(field).PropertyType == typeof(int))
{
value = condition.ValueAsInt;
}
else
{
value = condition.ValueAsDouble;
}
break;
case FilterType.String:
value = condition.Value;
break;
default:
throw new ArgumentOutOfRangeException();
}
list1.RemoveAll(
item =>
{
object oValue = item.GetType().GetProperty(field).GetValue(item, null);
IComparable cItem = oValue as IComparable;
switch (comparison)
{
case Comparison.Eq:
switch (type)
{
case FilterType.List:
return !(value as ReadOnlyCollection<string>).Contains(oValue.ToString());
case FilterType.String:
return !oValue.ToString().StartsWith(value.ToString());
default:
return !cItem.Equals(value);
}
case Comparison.Gt:
return cItem.CompareTo(value) < 1;
case Comparison.Lt:
return cItem.CompareTo(value) > -1;
default:
throw new ArgumentOutOfRangeException();
}
}
);
}
}
}