实现自己的Function CriteriaOperator(下面用FCO代替)需要实现DevExpress.Data.Filtering.ICustomFunctionOperator接口,并实现其3个方法(属性):
string Name { get; } :指定自定义FCO的名称;
object Evaluate (params object[] perands) :指定自定义FCO计算的实现及结果,类似一个函数,参数是FCO可带0或多个参数;
Type ResultType(params Type[] operands) : 自定义FCO的返回结果的类型
另外,还需要在该FCO类中定义静态构造函数,注册该操作符。
using DevExpress.Data.Filtering;
using DevExpress.ExpressApp;
namespace SolutionModule
{
public class WeekAgoOperator : ICustomFunctionOperator
{
//此名称即为使用该操作符的名称:WeekAgo()
public string Name
{
get { return "WeekAgo"; }
}
public object Evaluate(params object[] operands)
{
return DateTime.Now.AddDays(-3);
}
public Type ResultType(params Type[] operands)
{
return typeof(DateTime);
}
static WeekAgoOperator()
{
WeekAgoOperator instance = new WeekAgoOperator();
if (CriteriaOperator.GetCustomFunction(instance.Name) == null)
{
CriteriaOperator.RegisterCustomFunction(instance);
}
}
public static void Register() { }
}
}
最后,需要在module构造器中注册操作符,在Module.cs文件中。
public sealed partial class SolutionModule : ModuleBase
{
public SolutionModule()
{
InitializeComponent();
WeekAgoOperator.Register();
}
}
要使用该FCO过滤ListView,在对应ListView的Filters节点下新建一个ListViewFilterItem,设置其Criteria为 Time > WeekAgo(),Time是BO的DateTime类型的属性。然后将Filters的当前过滤器CurrentFilter设为刚新建的ListViewFilterItem即可。