Winforms平臺界面開發技巧,如何快速掌握Filter Editor(二)

點擊“瞭解更多”獲取DevExpress v19.2完整版下載

DevExpress Winforms Controls 內置140多個UI控件和庫,完美構建流暢、美觀且易於使用的應用程序。

DevExpress WinForms安裝附帶兩個允許最終用戶構建過濾器查詢的控件:提供GUI的Filter控件和將Filter控件與基於文本輸入的面板組合在一起的Filter Editor控件。WinForms中,大多數數據感知控件都使用這些組件,但是您也可以將其包含在自己的表單中,並根據需要將其綁定到數據感知控件中。

Registering函數

自定義函數準備就緒後,您需要對其進行註冊,即將其添加到Filter控件和Filter Editor控件支持的函數列表中。如果您在自定義函數類中包括了可選的Register和Unregister方法,則註冊代碼很短:

//Program.cs filenamespace DXSample {static class Program {[STAThread]static void Main() {IsWeekendFunction.Register();WithinDaysOfTodayFunction.Register();NotBeginsWithFunction.Register();

// ...Application.Run(new Main());}}}

從技術上講,您的函數現在可用。如果您在Filter Editor控件的文本面板中手動編輯表達式,並使用這些自定義函數中的任何一個,則將生成有效的過濾條件。 但是到目前為止,這些函數將不會包含在可視化面板中。

根據您的要求,使用以下三種技術之一將自定義函數添加到GUI。

一種特定的控件

若要使一個函數僅可用於一個特定的數據感知控件及其嵌入式Filter Editor控件,請為該控件的QueryCustomFunctions事件實現一個處理程序。使用以下代碼,可以在嵌入式Filter Editor和Excel-style過濾器菜單中為數據網格使用IsWeekendFunction,而僅在過濾器編輯器中可見“ InsideDaysOfToday”函數。

gridView1.QueryCustomFunctions += OnQueryCustomFunctions;

private void OnQueryCustomFunctions(object sender,DevExpress.XtraGrid.Views.Grid.CustomFunctionEventArgs e) {if(e.PropertyType == typeof(DateTime)) {e.Add(IsWeekendFunction.FunctionName);if(e.IsFilterEditor)e.Add(WithinDaysOfTodayFunction.FunctionName);}}

Winforms平臺界面開發技巧,如何快速掌握Filter Editor(二)

所有Filter和Filter Editor控件

若要註冊全局自定義函數來包含在所有Filter和Filter Editor控件中,請將它們添加到事件CriteriaOperator.QueryCustomFunctions的處理程序中。 此示例中全局註冊了NotBeginsWith函數:

static class Program {[STAThread]static void Main() {// ...CriteriaOperator.QueryCustomFunctions += OnQueryCustomUIFunctions;// ...}

private static void OnQueryCustomUIFunctions(object sender,DevExpress.Data.Filtering.CustomFunctionEventArgs e) {if(e.PropertyType == typeof(string)) {e.Add(NotBeginsWithFunction.FunctionName);}}}

特定於個別屬性

若要註冊所有Filter和Filter Editor控件都應該可用但特定於數據類型屬性的函數,請使用屬性DevExpress.Data.Filtering.CustomFunction註釋屬性。 在此示例中,數據網格顯示具有兩個字符串屬性Text和Info的類型,自定義函數NotBeginsWith僅適用於Info字段。

[CustomFunction(NotBeginsWithFunction.FunctionName /*, Image = <image>*/)]public string Info {get { return info; }set {if (info != value) {info = value;OnPropertyChanged();}}}/<image>

Winforms平臺界面開發技巧,如何快速掌握Filter Editor(二)


分享到:


相關文章: