轉帖|使用教程|編輯:龔雪|2016-01-04 09:23:06.000|閱讀 1125 次
概述:本教程主要為大家講解C1DataGrid for WPF的過濾。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
本教程主要為大家講解C1DataGrid for WPF的過濾。
多行過濾是默認過濾條件的擴展。實際上,過濾條件的數目是不受限制的,可以按照用戶選擇增加。和多值類似,可以自定義任意列的過濾,通過在XAML里設置Filter屬性。例如,為了繼承多條件過濾,添加C1MultiLineTextFilter 給任何的文字列(注意:也同樣對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>
效果如圖:
對于用戶來看,這是很普遍的。C1DataGrid支持各種類型的過濾,通過DataGridFilterList類就能實現。例如,如果您想要展示條件文字過濾和數字過濾,就可以如下所示:
<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>
如圖所示:
模板列不支持默認過濾,但是您依然可以通過設置Filter屬性自定義過濾。例如,如下展示了如何給模板列設置多值過濾:
<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中實現過濾。現在就來講講這些用代碼如何設置。主要就是有兩個關鍵的事件:FilterLoading和FilterOpened。設置一個新的多值過濾,代碼如下:
private void dataGrid_FilterLoading(object sender, DataGridColumnEditableValueEventArgs<IDataGridFilter> e) { var column = e.Column; var multiValueFilter = new DataGridMultiValueFilter(); (e.Value as DataGridFilter).InnerControl = multiValueFilter; }
如下是如何在打開和操作多值列表的時候,獲取過濾。
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); }
如果是默認過濾或是高級默認過濾,需要在FilterOpened事件中獲取它們,并且動態應用。例如,想要改變DateTime過濾的StartDate,或是如果需要調整期望的多值過濾,e.Column.Filter參數將可以獲取到默認過濾。e.Value參數可以獲取高級過濾。如下:
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 = } } } }
過濾的功能還不止于此。用戶還可以做自定義過濾,分配特定的列。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網