實現自己的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即可。