强大的DataGrid组件[13]_字段过滤(Filter)——Silverlight学习笔记[21]
在DataGrid中使用字段過濾可以用來進(jìn)行數(shù)據(jù)的篩選,查找出符合條件的信息。本文將為大家介紹如何對DataGrid執(zhí)行字段過濾。
?
需要了解的知識
1)PagedCollectionView
它代表了一個有關(guān)分組、排序、篩選和導(dǎo)航的分頁數(shù)據(jù)集合。
2)PagedCollectionView的Filter屬性
用來設(shè)置PagedCollectionView的過濾器,進(jìn)行字段信息等過濾。
3)過濾器函數(shù)
用作過濾器的主體
?
實(shí)例
詳細(xì)的說明在代碼注釋中給出。
?
MainPage.xaml文件代碼:
<UserControl
?? ?xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
?? ?xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
?? ?xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
?? ?mc:Ignorable="d" xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" x:Class="SilverlightClient.MainPage"
?? ?d:DesignWidth="320" d:DesignHeight="240">
??? <Grid x:Name="LayoutRoot" Background="White" Width="320" Height="240">
??????? <TextBlock Height="24" HorizontalAlignment="Left" Margin="8,8,0,0" VerticalAlignment="Top" Width="67" Text="過濾字段:" TextWrapping="Wrap" FontSize="13.333"/>
??????? <ComboBox x:Name="cbColumns" FontSize="14" Height="24" Margin="75,8,135,0" VerticalAlignment="Top"/>
??????? <TextBlock Height="24" HorizontalAlignment="Right" Margin="0,8,104,0" VerticalAlignment="Top" Width="27" FontSize="13.333" Text="值:" TextWrapping="Wrap"/>
??????? <TextBox x:Name="tbValue" Height="24" FontSize="14" HorizontalAlignment="Right" Margin="0,8,8,0" VerticalAlignment="Top" Width="92" TextWrapping="Wrap"/>
??????? <data:DataGrid x:Name="dgEmployee" AutoGenerateColumns="False" Margin="7,36,7,45" FontSize="14">
??????????? <data:DataGrid.Columns>
??????????????? <data:DataGridTextColumn Header="工號" Binding="{Binding EmployeeID}"/>
??????????????? <data:DataGridTextColumn Header="姓名" Binding="{Binding EmployeeName}"/>
??????????????? <data:DataGridTextColumn Header="年齡" Binding="{Binding EmployeeAge}"/>
??????????????? <data:DataGridTextColumn Header="部門" Binding="{Binding DepartmentName}"/>
??????????????? <data:DataGridTextColumn Header="級別" Binding="{Binding Level}"/>
??????????? </data:DataGrid.Columns>
??????? </data:DataGrid>
??????????? <Button x:Name="btnFilter" Height="30" HorizontalAlignment="Left" Margin="7,0,0,8" VerticalAlignment="Bottom" Width="68" Content="過濾" FontSize="13.333"/>
??????? <Button x:Name="btnRestore" Height="30" HorizontalAlignment="Left" Margin="88,0,0,8" VerticalAlignment="Bottom" Width="68" Content="重置" FontSize="13.333"/>
??? </Grid>
</UserControl>
MainPage.xaml.cs文件代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Data;
?
namespace SilverlightClient
{
??? public class Employees
??? {
??????? public int EmployeeID { get; set; }
??????? public string EmployeeName { get; set; }
??????? public int EmployeeAge { get; set; }
??????? public string DepartmentName { get; set; }
??????? public string Level { get; set; }
??? }
?
??? public partial class MainPage : UserControl
??? {
??????? PagedCollectionView pcv;
?
??????? public MainPage()
??????? {
??????????? InitializeComponent();
??????????? this.Loaded += new RoutedEventHandler(MainPage_Loaded);
??????????? this.btnFilter.Click += new RoutedEventHandler(btnFilter_Click);
??????????? this.btnRestore.Click += new RoutedEventHandler(btnRestore_Click);
??????? }
?
??????? public List<string> GetColumns()
??????? {
??????????? List<string> c = new List<string>();
?? ?????????c.Add("員工號");
??????????? c.Add("姓名");
??????????? c.Add("年齡");
??????????? c.Add("部門");
??????????? c.Add("級別");
??????????? return c;
??????? }
?
??????? public List<Employees> GetEmployees()
??????? {
??????????? List<Employees> returnedValue = new List<Employees>();
??????????? returnedValue.Add(new Employees() { EmployeeID = 1, EmployeeName = "張三", EmployeeAge = 23, DepartmentName = "財(cái)務(wù)部", Level = "初級" });
??????????? returnedValue.Add(new Employees() { EmployeeID = 2, EmployeeName = "李四", EmployeeAge = 24, DepartmentName = "財(cái)務(wù)部", Level = "中級" });
??????????? returnedValue.Add(new Employees() { EmployeeID = 3, EmployeeName = "王五", EmployeeAge = 25, DepartmentName = "管理部", Level = "中級" });
??????????? returnedValue.Add(new Employees() { EmployeeID = 4, EmployeeName = "趙六", EmployeeAge = 26, DepartmentName = "管理部", Level = "初級" });
??????????? returnedValue.Add(new Employees() { EmployeeID = 5, EmployeeName = "錢七", EmployeeAge = 27, DepartmentName = "工程部", Level = "中級" });
??????????? returnedValue.Add(new Employees() { EmployeeID = 6, EmployeeName = "孫八", EmployeeAge = 28, DepartmentName = "工程部", Level = "初級" });
??????????? returnedValue.Add(new Employees() { EmployeeID = 7, EmployeeName = "小趙", EmployeeAge = 26, DepartmentName = "財(cái)務(wù)部", Level = "中級" });
??????????? returnedValue.Add(new Employees() { EmployeeID = 8, EmployeeName = "小錢", EmployeeAge = 28, DepartmentName = "財(cái)務(wù)部", Level = "高級" });
??????????? return returnedValue;
??????? }
?
??????? void MainPage_Loaded(object sender, RoutedEventArgs e)
??????? {
??????????? GetRestore();
??????? }
?
??????? void btnRestore_Click(object sender, RoutedEventArgs e)
??????? {
??????????? GetRestore();
??????? }
?
??????? void btnFilter_Click(object sender, RoutedEventArgs e)
??????? {
??????????? if (cbColumns.SelectedIndex != -1 && tbValue.Text != "")
??????????? {
??????????????? switch (cbColumns.SelectedIndex)
??????????????? {
??????????????????? case 0:
??????????????????? pcv.Filter = new Predicate<object>(FilterEmployeeID);
??????????????????? break;
??????????????????? case 1:
??????????????????? pcv.Filter = new Predicate<object>(FilterEmployeeName);
??????????????????? break;
??????????????????? case 2:
??????????????????? pcv.Filter = new Predicate<object>(FilterEmployeeAge);
??????????????????? break;
??????????????????? case 3:
??????????????????? pcv.Filter = new Predicate<object>(FilterDepartmentName);
??????????????????? break;
??????????????????? case 4:
??????????????????? pcv.Filter = new Predicate<object>(FilterLevel);
??????????????????? break;
??????????????? }
??????????? }
??????? }
???????
??????? //過濾器函數(shù)
??????? public bool FilterEmployeeID(object t)
??????? {
??????????? Employees em = t as Employees;
??????????? return (em.EmployeeID == Convert.ToInt32(tbValue.Text));
??????? }
?
? ??????public bool FilterEmployeeName(object t)
??????? {
??????????? Employees em = t as Employees;
??????????? return (em.EmployeeName == Convert.ToString(tbValue.Text));
??????? }
?
??????? public bool FilterEmployeeAge(object t)
??????? {
??????????? Employees em = t as Employees;
??????????? return (em.EmployeeAge >= Convert.ToInt32(tbValue.Text));//這里用的是大于等于條件
??????? }
?
??????? public bool FilterDepartmentName(object t)
??????? {
??????????? Employees em = t as Employees;
??????????? return (em.DepartmentName == Convert.ToString(tbValue.Text));
??????? }
?
??????? public bool FilterLevel(object t)
??????? {
??????????? Employees em = t as Employees;
??????????? return (em.Level == Convert.ToString(tbValue.Text));
??????? }
?
??????? //重置信息
??????? public void GetRestore()
??????? {
??????????? pcv = new PagedCollectionView(GetEmployees());
??????????? dgEmployee.ItemsSource = pcv;
??????????? cbColumns.ItemsSource = GetColumns();
??????????? cbColumns.SelectedIndex = 0;
??????????? tbValue.Text = String.Empty;
??????? }
??? }
}
?
最終效果圖
?
作者:Kinglee文章出處:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
版權(quán)聲明:本文的版權(quán)歸作者與博客園共有。轉(zhuǎn)載時(shí)須注明本文的詳細(xì)鏈接,否則作者將保留追究其法律責(zé)任。
總結(jié)
以上是生活随笔為你收集整理的强大的DataGrid组件[13]_字段过滤(Filter)——Silverlight学习笔记[21]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 限制部分Postfix用户只能内部收发的
- 下一篇: 自己的路