WPF第十章排序筛选

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

我们使用CollectionView实现了对于绑定数据的导航,除导航功能外,还可以通过CollectionView对数据进行类似于DataView的排序、筛选等功能。一、数据的排序:使用第二十四节的数据源,查询所有的产品信息:1:Windowx:Class=WPF_24.CollectionViewSortData2:xmlns=:xmlns:x=:xmlns:lib=clr-namespace:WPF_24_Library;assembly=WPF_24_Library5:Title=CollectionViewSortDataHeight=300Width=5006:Window.Resources7:ObjectDataProviderx:Key=myDataSource8:ObjectType={x:Typelib:DataControl}9:MethodName=GetAllProductInfo/10:/Window.Resources11:GridMargin=512:Grid.RowDefinitions13:RowDefinition/14:RowDefinitionHeight=50/15:/Grid.RowDefinitions16:ListBoxGrid.Row=017:DataContext={StaticResourcemyDataSource}18:ItemsSource={Binding}19:ListBox.ItemTemplate20:DataTemplate21:WrapPanel22:TextBlockText={BindingPath=ProductID}Width=50/23:TextBlockText={BindingPath=ProductName}Width=300/24:TextBlockText={BindingPath=UnitPrice}Width=50/25:/WrapPanel26:/DataTemplate27:/ListBox.ItemTemplate28:/ListBox29:WrapPanelGrid.Row=1VerticalAlignment=CenterHorizontalAlignment=Center30:TextBlockText=第一排序:VerticalAlignment=Center/31:ComboBoxSelectedIndex=0Width=80x:Name=cmbColumnA32:ComboBox.Items33:ComboBoxItemTag=ProductID产品编号/ComboBoxItem34:ComboBoxItemTag=ProductName产品名称/ComboBoxItem35:ComboBoxItemTag=UnitPrice产品单价/ComboBoxItem36:/ComboBox.Items37:/ComboBox38:TextBlockText=第二排序:VerticalAlignment=Center/39:ComboBoxSelectedIndex=0Width=80x:Name=cmbColumnB40:ComboBox.Items41:ComboBoxItemTag=ProductID产品编号/ComboBoxItem42:ComboBoxItemTag=ProductName产品名称/ComboBoxItem43:ComboBoxItemTag=UnitPrice产品单价/ComboBoxItem44:/ComboBox.Items45:/ComboBox46:ButtonContent=排序Margin=10,0,0,0Click=Button_Click/47:/WrapPanel48:/Grid49:/Window实现对数据的排序,使用的是CollectionView对象中的SortDescriptions集合属性,其包含多个SortDescription对象,按照其先后顺序对数据实现排序。注意SortDescription对象的构造方法的两个参数,第一个参数是字符串类型的,表示数据类型中的某个属性的属性名,其属性的类型必须实现IComparable接口,即实现相应的排序规则;第二参数是ListSortDeirection枚举,表示排序的顺序是正序还遇倒序。本例应在按钮的Click事件中定义如下的代码:1:privatevoidButton_Click(objectsender,RoutedEventArgse)2:{3://获取数据源适配器4:ObjectDataProviderprovider=5:(ObjectDataProvider)(this.FindResource(myDataSource));6://获取数据源7:ListProductInfocollections=(ListProductInfo)(provider.Data);8:9://获取数据源对应的CollectionView10:ICollectionViewview=CollectionViewSource.GetDefaultView(collections);11://清除原有的排序12:view.SortDescriptions.Clear();13:14://获取要排序的两个列的列名15:stringfirstColumn=((ComboBoxItem)(cmbColumnA.SelectedItem)).Tag.ToString();16:stringsecendColumn=((ComboBoxItem)(cmbColumnB.SelectedItem)).Tag.ToString();17:18:if(view.CanSort)19:{20://添加排序规则(注意添加的顺序)21:view.SortDescriptions.Add(22:newSortDescription(firstColumn,ListSortDirection.Ascending));23:view.SortDescriptions.Add(24:newSortDescription(secendColumn,ListSortDirection.Ascending));25:}26:}应用程序执行这后的效果如图:二、实现对数据的筛选实现对数据的筛选使用的是CollectionView对象的Filter属性,Filter属性的类型是Predicateobject委托,其要求绑定的方法返回一个布尔值,系统将依据其返回的布尔值筛选数据,使得筛选后的所有数据满足使方法返回True。例如,在前面的例子中添加对单价的筛选条件:1:!--在界面中添加Grid的一行,并在此行中添加筛选数据所需的界面元素,省略其他代码--2:WrapPanelGrid.Row=2VerticalAlignment=CenterHorizontalAlignment=Center3:TextBlockText=产品单价范围:/4:TextBoxWidth=50x:Name=lowPrice/5:TextBlockText=~/6:TextBoxWidth=50x:Name=highPrice/7:ButtonContent=筛选Margin=10,0,0,0Click=Button_Click_1/8:/WrapPanel在按钮的Click事件中定义如下代码:1:privatevoidButton_Click_1(objectsender,RoutedEventArgse)2:{3://获取数据源适配器4:ObjectDataProviderprovider=5:(ObjectDataProvider)(this.FindResource(myDataSource));6://获取数据源7:ListProductInfocollections=(ListProductInfo)(provider.Data);8:9://获取数据源对应的CollectionView10:ICollectionViewview=CollectionViewSource.GetDefaultView(collections);11:12:if(view.CanFilter)13:{14://绑定数据筛选的条件15:view.Filter=newPredicateobject(dataFilter);16:}17:}18:19://数据筛选的条件20:privatebooldataFilter(objectobj)21:{22:decimallow=decimal.Parse(lowPrice.Text);23:decimalhigh=decimal.Parse(highPrice.Text);24:25:ProductInfoinfo=(ProductInfo)obj;26:27:returninfo.UnitPrice=low&&info.UnitPrice=high;28:}执行的结果如图所示,从中也可以看出,筛选可以和排序一起使用三、实现数据分组实现数据分组,使用的是CollectionView的GroupDescriptions集合属性,其包含的元素是GroupDescription抽象类对象,在Framework中,系统定义了一个GroupDescription的子类PropertyGroupDescription,实现根据数据的某属性进行分组的功能。例如,实现对于产品单价的分组:在XAML的Grid中添加一行,添加对于分组的显示:1:!--实现分组的操作,省略其他代码--2:WrapPanelGrid.Row=3VerticalAlignment=CenterHorizontalAlignment=Center3:TextBlockText=分组条件:/4:RadioButtonContent=按单价分组IsChecked=TrueChecked=GroupByUnitPrice_Checked/5:RadioButtonContent=按名称分组Checked=GroupByProductName_Checked/6:/WrapPanel在后台CS文件中,实现GroupByUnitPrice_Checked方法,实现根据UnitPrice分组:1:privatevoidGroupByUnitPrice_Checked(objectsender,RoutedEventArgse)2:{3://获取数据源适配器4:ObjectDataProviderprovider=5:(ObjectDataProvider)(this.FindResource(myDataSource));6://获取数据源7:ListProductInfocollections=(ListProductInfo)(provider.Data);8:9://获取数据源对应的CollectionView10:ICollectionViewview=CollectionViewSource.GetDefaultView(collections);11:12:if(view.CanGroup)13:{14:view.GroupDescriptions.Clear();15:view.GroupDescriptio

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功