首页 > 代码库 > D21_03view_分组 groupby

D21_03view_分组 groupby

image

 

<Window x:Class="demo.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"                xmlns:db="clr-namespace:StoreDatabase;assembly=StoreDatabase"        xmlns:local="clr-namespace:demo"        Title="FilterCollection" Height="390" Width="628"    >    <Grid>        <Grid.ColumnDefinitions>            <ColumnDefinition Width="3*"></ColumnDefinition>            <ColumnDefinition Width="5*"></ColumnDefinition>        </Grid.ColumnDefinitions>        <Grid>            <Grid.RowDefinitions>                <RowDefinition Height="Auto"></RowDefinition>                <RowDefinition Height="*"></RowDefinition>                <RowDefinition Height="Auto"></RowDefinition>            </Grid.RowDefinitions>            <Button Margin="7,7,7,0" Padding="2" Click="cmdGetProducts_Click">Get Products</Button>            <ListBox Grid.Row="1" Margin="7,3,7,10" Name="lstProducts" DisplayMemberPath="ModelName">                <ListBox.GroupStyle>                    <GroupStyle>                        <GroupStyle.HeaderTemplate>                            <DataTemplate>                                <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Foreground="White" Background="LightGreen" Margin="0,5,0,0" Padding="3"></TextBlock>                            </DataTemplate>                        </GroupStyle.HeaderTemplate>                    </GroupStyle>                </ListBox.GroupStyle>            </ListBox>            <Border Grid.Row="2" Margin="7" Padding="7" BorderBrush="SteelBlue" BorderThickness="1" >                <Grid>                    <Grid.ColumnDefinitions>                        <ColumnDefinition></ColumnDefinition>                        <ColumnDefinition></ColumnDefinition>                    </Grid.ColumnDefinitions>                    <Grid.RowDefinitions>                        <RowDefinition></RowDefinition>                        <RowDefinition></RowDefinition>                    </Grid.RowDefinitions>                    <Label>Price > Than</Label>                    <TextBox Grid.Column="1" Name="txtMinPrice" TextChanged="txtMinPrice_TextChanged">0</TextBox>                    <Button Grid.Row="1" Margin="2" Padding="2" Click="cmdFilter_Click">Filter</Button>                    <Button Grid.Row="1" Grid.Column="1" Margin="2" Padding="2" Click="cmdRemoveFilter_Click">Remove Filter</Button>                </Grid>            </Border>        </Grid>        <GridSplitter Grid.Column="1" HorizontalAlignment="Left" VerticalAlignment="Stretch"                   Width="5"></GridSplitter>        <Border Grid.Column="1" Padding="7" Margin="7" Background="LightSteelBlue">            <Grid DataContext="{Binding ElementName=lstProducts, Path=SelectedItem}" >                <Grid.ColumnDefinitions>                    <ColumnDefinition Width="Auto"></ColumnDefinition>                    <ColumnDefinition></ColumnDefinition>                </Grid.ColumnDefinitions>                <Grid.RowDefinitions>                    <RowDefinition Height="Auto"></RowDefinition>                    <RowDefinition Height="Auto"></RowDefinition>                    <RowDefinition Height="Auto"></RowDefinition>                    <RowDefinition Height="Auto"></RowDefinition>                    <RowDefinition Height="*"></RowDefinition>                </Grid.RowDefinitions>                <TextBlock Margin="7">Model Number:</TextBlock>                <TextBox Margin="5" Grid.Column="1" Text="{Binding Path=ModelNumber}"></TextBox>                <TextBlock Margin="7" Grid.Row="1">Model Name:</TextBlock>                <TextBox Margin="5" Grid.Row="1" Grid.Column="1" Text="{Binding Path=ModelName}"></TextBox>                <TextBlock Margin="7" Grid.Row="2">Unit Cost:</TextBlock>                <TextBox Margin="5" Grid.Row="2" Grid.Column="1" Text="{Binding Path=UnitCost,StringFormat={}{0:C}}"></TextBox>                <TextBlock Margin="7,7,7,0" Grid.Row="3">Description:</TextBlock>                <TextBox Margin="7" Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2"                  TextWrapping="Wrap" VerticalScrollBarVisibility="Visible" Text="{Binding Path=Description}"></TextBox>            </Grid>        </Border>    </Grid></Window>

 

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using StoreDatabase;using System.ComponentModel;namespace demo{    /// <summary>    /// MainWindow.xaml 的交互逻辑    /// </summary>    public partial class MainWindow : Window    {        private ICollection<Product> products;        public MainWindow()        {            InitializeComponent();                   }        private void cmdGetProducts_Click(object sender, RoutedEventArgs e)        {            products = App.StoreDb.GetProducts();            lstProducts.ItemsSource = products;            ICollectionView view = CollectionViewSource.GetDefaultView(lstProducts.ItemsSource);            //先对CategoryName排序,再对ModelName排序            view.SortDescriptions.Add(new SortDescription("CategoryName",ListSortDirection.Ascending));            view.SortDescriptions.Add(new SortDescription("ModelName", ListSortDirection.Ascending));            //对CategoryName分组            view.GroupDescriptions.Add(new PropertyGroupDescription("CategoryName"));        }        private void cmdFilter_Click(object sender, RoutedEventArgs e)        {            decimal minimumPrice;            if (Decimal.TryParse(txtMinPrice.Text, out minimumPrice))            {                ListCollectionView view = (ListCollectionView)CollectionViewSource.GetDefaultView(lstProducts.ItemsSource);                if (view != null)                {                    filterer = new ProductByPriceFilterer(minimumPrice);                    view.Filter = new Predicate<object>(filterer.FilterItem);                }            }        }        private void cmdRemoveFilter_Click(object sender, RoutedEventArgs e)        {            ListCollectionView view = CollectionViewSource.GetDefaultView(lstProducts.ItemsSource) as ListCollectionView;            if (view != null)            {                view.Filter = null;            }        }        private ProductByPriceFilterer filterer;        private void txtMinPrice_TextChanged(object sender, TextChangedEventArgs e)        {            ListCollectionView view = CollectionViewSource.GetDefaultView(lstProducts.ItemsSource) as ListCollectionView;            if (view != null)            {                decimal minimumPrice;                if (Decimal.TryParse(txtMinPrice.Text, out minimumPrice) && (filterer != null))                {                    filterer.MinimumPrice = minimumPrice;                    view.Refresh();                }            }        }    }    public class ProductByPriceFilterer    {        public decimal MinimumPrice        {            get;            set;        }        public ProductByPriceFilterer(decimal minimumPrice)        {            MinimumPrice = minimumPrice;        }        public bool FilterItem(Object item)        {            Product product = (Product)item;            if (product != null)            {                if (product.UnitCost > MinimumPrice)                {                    return true;                }            }            return false;        }    }}

D21_03view_分组 groupby