D21_02_view过滤排序filter orderby

<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>

            <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);
            view.SortDescriptions.Add(new SortDescription("ModelName", ListSortDirection.Ascending));

        }

        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);
                    //Predicate是一个委托,会为FilterItem传递lstProducts.ItemsSource对应的数据集的类型(produncts)
                    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;
        }
    }
}

StoreDB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Collections.ObjectModel;

namespace StoreDatabase
{
    public class StoreDB
    {
        private string connectionString = StoreDatabase.Properties.Settings.Default.Store;        

        public ICollection<Product> GetProducts()
        {
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand("GetProducts", con);
            cmd.CommandType = CommandType.StoredProcedure;

            ObservableCollection<Product> products = new ObservableCollection<Product>();
            try
            {
                con.Open();
                SqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    // Create a Product object that wraps the
                    // current record.
                    Product product = new Product((string)reader["ModelNumber"],
                        (string)reader["ModelName"], (decimal)reader["UnitCost"],
                        (string)reader["Description"], (int)reader["ProductID"],
                        (string)reader["CategoryName"], (string)reader["ProductImage"]);
                    // Add to collection
                    products.Add(product);
                }
            }
            finally
            {
                con.Close();
            }

            return products;
        }
    }
}
时间: 2024-12-10 12:20:02

D21_02_view过滤排序filter orderby的相关文章

AngularJS过滤排序思路

本篇主要整理使用AngularJS进行过滤排序的思路. 在controller中,$scope的persons字段存储数组. $scope.persons = [ { "name": "aa", "email": "aaemail", "birthdate": "2015-03-23T18:00:37-07:00", "phonenumber": "aaph

网络请求参数的处理,包含过滤,排序,拼接,加密

网络请求的参数过滤,排序,拼接,加密.也参考了alipay. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ICE.Common { public class WebCore { /// <summary> /// 除去数组中的空值和签名参数并以字母a到z的顺序排序 /// </sum

filter,orderBy等过滤器

filter用法比较灵活(也增加了较高的复杂度),单独列出. 基本的用法: <input type="text" class="search" ng-model="keyword" /> ng-repeat="item in items | filter:{name:keyword,done:false}" // 默认是and连接多个属性 ng-repeat="item in items | filter

lambda函数/排序/filter/map

1.lambda 匿名函数 zrf = lambda x:x**2 ret = zrf(10) #这里面实际上还是有函数名 print(ret) 2.sorted 排序(list也自带排序功能) 排序函数 sorted(iterable,key=函数名,reverse=False) key:把里面的每一个值拿到函数处理之后返回一个 数字 在根据数字排序 顺序或者倒序 3.filter 筛选 过滤 filter(function,iterable) function:用来筛选的函数 函数返回的是t

在.NET下学习Extjs(第三个案例 Array的过滤方法(filter))

Ext.Array.filter(Array array,Function fn,Object scope):Array array是一个数组,fn是过滤函数,scope是作用域,filter返回的是一个新的数组. 遍历原数组的每一项,经过滤函数过滤,为true的留下构建成新的数组. 构建代码如下: 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 &

AngularJS如何使用ngRepeat过滤排序

NG重复指令,带过滤器,像这样: <li ng-repeat="item in items | orderBy:'order_prop' | filter:query | limitTo:4"></li> orderBy为key值,当然也可以为变量,在controller中可定义该变量值,如: <li ng-repeat="item in items | orderBy:oreder | filter:query | limitTo:4"

LINQ 按多个字段排序(orderby、thenby、Take)

orderby  子句解析为 OrderBy()方法,orderby descending 子句解析为OrderBy Descending()方法: var racers = Formula1.GetChampions(). Where(r = > r.Country == "Brazil"). OrderByDescending(r = > r.Wins). Select(r = > r); OrderBy() 和 OrderByDescending  ()方法返回

List多字段排序,orderBy,ThenBy

List排序问题,orderBy,ThenBy 1.List中一个字段排序 前几天做的项目中,获取的List<T>需要用某个字段来进行排序,困扰了很久.用OrderBy解决了.具体是这样的. List.OrderBy(i=>i.id):表示根据id来排序,默认是升序. List.OrderByDescending(i=>i.name):根据name排序,降序排列. 2.List中两个字段排序: 写法如下,直接用例子: List.OrderBy(i=>i.id).ThenBy(

js分组排序算法, OrderBy

由于项目中需要对数据进行分组排序,类似于sql中 order by column1,column2....  实现的关键是 分组排序,第一个column1,排序完成之后,对其分组,然后按照column2 排序, 在分组. 以此类推. 下面给出实现: /** * [orderBy description] * @param {[type]} source [description] * @param {[type]} orders [description] * @param {[type]} t