轉(zhuǎn)帖|使用教程|編輯:龔雪|2016-01-04 09:23:06.000|閱讀 1125 次
概述:本教程主要為大家講解C1DataGrid for WPF的過濾。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
本教程主要為大家講解C1DataGrid for WPF的過濾。
多行過濾是默認(rèn)過濾條件的擴(kuò)展。實(shí)際上,過濾條件的數(shù)目是不受限制的,可以按照用戶選擇增加。和多值類似,可以自定義任意列的過濾,通過在XAML里設(shè)置Filter屬性。例如,為了繼承多條件過濾,添加C1MultiLineTextFilter 給任何的文字列(注意:也同樣對(duì)DateTimeHe Numeric起作用)。代碼參考:
<c1:C1DataGrid Name="c1DataGrid1" AutoGenerateColumns="False" CanUserFilter="True"> <c1:C1DataGrid.Columns> <c1:DataGridTextColumn Header="Flavor" Binding="{Binding FlavorName}" FilterMemberPath="FlavorName"> <!--Add Multi-Line Filter--> <c1:DataGridTextColumn.Filter> <c1:DataGridContentFilter > <c1:DataGridMultiLineTextFilter /> </c1:DataGridContentFilter> </c1:DataGridTextColumn.Filter> </c1:DataGridTextColumn> <!—Add Other Columns --> ... </c1:C1DataGrid.Columns> </c1:C1DataGrid>
效果如圖:
對(duì)于用戶來看,這是很普遍的。C1DataGrid支持各種類型的過濾,通過DataGridFilterList類就能實(shí)現(xiàn)。例如,如果您想要展示條件文字過濾和數(shù)字過濾,就可以如下所示:
<c1:C1DataGrid Name="c1DataGrid1" ItemsSource="{Binding Flavors}" AutoGenerateColumns="False" CanUserFilter="True"> <c1:C1DataGrid.Columns> <c1:DataGridTextColumn Header="Flavor" Binding="{Binding FlavorName}" FilterMemberPath="FlavorName" /> <c1:DataGridCheckBoxColumn Header="Has Nuts" Binding="{Binding IncludesNuts}" FilterMemberPath="IncludesNuts" /> <c1:DataGridTextColumn Header="Percent" Format="p1" Binding="{Binding Percent}" FilterMemberPath="Percent"> <c1:DataGridTextColumn.Filter> <c1:DataGridContentFilter > <c1:DataGridFilterList> <c1:DataGridTextFilter /> <c1:DataGridNumericFilter Format="p1" /> </c1:DataGridFilterList> </c1:DataGridContentFilter> </c1:DataGridTextColumn.Filter> </c1:DataGridTextColumn> </c1:C1DataGrid.Columns> </c1:C1DataGrid>
如圖所示:
模板列不支持默認(rèn)過濾,但是您依然可以通過設(shè)置Filter屬性自定義過濾。例如,如下展示了如何給模板列設(shè)置多值過濾:
<c1:C1DataGrid Name="c1DataGrid1" ItemsSource="{Binding Flavors}" AutoGenerateColumns="False" CanUserFilter="True"> <c1:C1DataGrid.Columns> <!--Add Template Column--> <c1:DataGridTemplateColumn Header="Flavor" FilterMemberPath="FlavorName"> <c1:DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding FlavorName}" /> </DataTemplate> </c1:DataGridTemplateColumn.CellTemplate> <!--Add Multi-Value Filter--> <c1:DataGridTemplateColumn.Filter> <c1:DataGridContentFilter > <c1:DataGridMultiValueFilter ItemsSource="{Binding Flavors}" MaxHeight="200" DisplayMemberPath="FlavorName" ValueMemberPath="FlavorName" /> </c1:DataGridContentFilter> </c1:DataGridTemplateColumn.Filter> </c1:DataGridTemplateColumn> <!--Add Other Columns--> ... </c1:C1DataGrid.Columns> </c1:C1DataGrid>
之前都是討論如何在XAML中實(shí)現(xiàn)過濾?,F(xiàn)在就來講講這些用代碼如何設(shè)置。主要就是有兩個(gè)關(guān)鍵的事件:FilterLoading和FilterOpened。設(shè)置一個(gè)新的多值過濾,代碼如下:
private void dataGrid_FilterLoading(object sender, DataGridColumnEditableValueEventArgs<IDataGridFilter> e) { var column = e.Column; var multiValueFilter = new DataGridMultiValueFilter(); (e.Value as DataGridFilter).InnerControl = multiValueFilter; }
如下是如何在打開和操作多值列表的時(shí)候,獲取過濾。
void dataGrid_FilterOpened(object sender, DataGridColumnValueEventArgs<IDataGridFilter> e) { var boundColumn = e.Column as DataGridBoundColumn; if (boundColumn == null) return; // create and set multi-value filter control into the column var filterControl = (DataGridMultiValueFilter)((DataGridFilter)e.Value).InnerControl; filterControl.ItemsSource = items.Select(selector).Distinct().OrderBy(o => o); }
如果是默認(rèn)過濾或是高級(jí)默認(rèn)過濾,需要在FilterOpened事件中獲取它們,并且動(dòng)態(tài)應(yīng)用。例如,想要改變DateTime過濾的StartDate,或是如果需要調(diào)整期望的多值過濾,e.Column.Filter參數(shù)將可以獲取到默認(rèn)過濾。e.Value參數(shù)可以獲取高級(jí)過濾。如下:
void c1DataGrid1_FilterOpened(object sender, C1.Silverlight.DataGrid.DataGridColumnValueEventArgs<C1.Silverlight.DataGrid.IDataGridFilter> e) { // e.Column.Filter gives you default column filter DataGridDateTimeFilter dgdf = e.Column.Filter as DataGridDateTimeFilter; if (dgdf != null) { dgdf.StartDate = new DateTime(2011, 1, 1); } // e.Value gives you advanced filter DataGridContentFilter dgcf = e.Value as DataGridContentFilter; if (dgcf != null) { DataGridFilterList dgfl = dgcf.Content as DataGridFilterList; if (dgfl != null) { if (dgfl.Items.Count > 1) { DataGridMultiValueFilter dgmv = dgfl.Items[1] as DataGridMultiValueFilter; // set filter // dgmv.Filter = } } } }
過濾的功能還不止于此。用戶還可以做自定義過濾,分配特定的列。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)