天天看點

深入解析 DataGrid 過濾功能

預設過濾

把一個IEnumerable資料源綁定到C1DataGrid上,設定CanUserFilter為true,就可以看到預設條件下的過濾結果。過濾器會根據使用者輸入的條件,列出過濾結果,比如“大于10”或者“包含R”。

深入解析 DataGrid 過濾功能

根據不同列的資料類型,C1DataGrid還提供了特殊的過濾器。比如日期類型或者布爾類型的列中,可以選擇适合的條件過濾器,如下圖所示:

深入解析 DataGrid 過濾功能

進階過濾器

C1.Silverlight.DataGrid.Filters.dll中提供了很多進階的過濾功能。這樣做的好處是,如果你需要這些進階特性,那麼就添加該dll到項目裡。如果不需要,那它不會對項目的size造成影響。

行過濾

另外一種基本的過濾功能可通過典型的過濾行來實作。過濾行是由一些文本框組成的固定行,使用者可以在改行的文本框中輸入過濾條件。在C1DataGrid中可以通過TopRows或BottomRows非常便捷的實作行過濾功能,隻需為其添加一個DataGridFilterRow類型的元素(請確定你添加了C1.Sliverlight.DataGrid.Filters程式集的引用),然後設定固定行數即可。

深入解析 DataGrid 過濾功能

全文過濾

C1DataGrid提供了對整個Grid中文本進行過濾的功能,使用者可一次性完成所有列的檢索或過濾操作。而這一切,隻需為FullTextSearchBehavior屬性綁定一個控件,例如:TextBox控件,它就會為你自動完成剩下的工作。

深入解析 DataGrid 過濾功能

多值過濾

C1DataGrid提供了類似于Excel那樣的多值過濾功能。可作為過濾條件的值以選擇清單的形式顯示,使用者可以選擇那些值顯示,那些不顯示,這為擁有唯一或者重複值的列提供了非常有效的過濾方式(例如:類别或類型列)。你可以通過兩種方法實作多值過濾功能。

第一種方法是利用C1DataGrid内置的進階過濾特性。隻需為Grid添加 一個C1AdvancedFiltersBehavior類,這樣就為Grid添加了内置的進階過濾功能,包括多值過濾。

通過C1AdvancedFiltersBehavior為Grid中的列添加了簡單過濾和多值過濾功能,這并沒有使用太多的控件,是為整個Grid添加進階過濾功能的最簡單方法。

深入解析 DataGrid 過濾功能

第二種方法會靈活一些。你可以将進階過濾功能關閉,直接在XAML或代碼中為每一列指定特殊的過濾類型,下面示範如何為某一列添加多值過濾功能:

需要注意的是,上面的方法是為多值過濾器指定ItemsSource來實作的。

深入解析 DataGrid 過濾功能

多條件過濾

多條件過濾是對預設過濾的一種擴充,你可以一次設定多個過濾條件,過濾條件的個數沒有限制,可根據使用者的需求設定相應的數量。

就像上面的多值過濾一樣,你可以在XAML中通過設定Filter屬性來定制過濾功能。例如,你可以為Text類型的列添加C1MultiLineTextFilter來實作多條件過濾功能(也可以為DateTime和Numeric類型的列設定多條件過濾)。

深入解析 DataGrid 過濾功能

組合過濾

通過組合過濾,使用者可以一次設定多種類型的過濾條件。C1DataGrid本身支援多種類型的過濾器,你可以使用DataGridFilterList為每列添加多種類型的過濾器。

例如,你想同時使用文本和數字過濾器,就可以通過下面的代碼來實作:

深入解析 DataGrid 過濾功能

為模闆列添加過濾功能

模闆列不支援預設的過濾功能,但可以通過設定Filter屬性來定制過濾功能。例如,通過下面的代碼可以為模闆列添加一個多值過濾功能:

通過代碼設定過濾功能

有些情況下,需要在代碼中控制過濾功能,C1DataGrid為此提供了兩個非常重要的事件。FilterLoading在每列的過濾器加載後觸發,你可以在這個事件中設定自定義的過濾器。FilterOpened在過濾器被打開之後觸發,此時可以動态設定一些選項的值。

下面示範如何使用代碼設定一個多值過濾器:

下面示範如何使用代碼為多值清單設定資料:

使用者自定義過濾器

C1DataGrid的過濾功能不局限于上面提到的幾種方式,你可以實作你需要的自定義過濾器,然後将這個過濾器設定給特定的列。根據資料的不同,你可以設定一個樹形結構、直方圖或者月曆形式的過濾器,你可以在C1DataGrid的例子中找到相應的實作。