【Silverlight】 DataGrid に フィルターを設定するには

◆ XAML

<UserControl x:Class="Views.FilterView "
    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                <Button Name="btnSetFilter" Click="btnSetFilter_Click" 
                    Content="フィルター設定" Height="30" Width="140"></Button>
                <Button Name="btnClearFilter" Click="btnClearFilter_Click" 
                    Content="フィルター解除" Height="30" Width="140"></Button>
            </StackPanel>
            <TextBlock Height="10" />
            <sdk:DataGrid Name="dataGrid1" Width="300" Height="300" 
                IsReadOnly="True" AutoGenerateColumns="True"
                HorizontalAlignment="Left"/>
        </StackPanel>
    </Grid>
</UserControl>

◆ C# Code

using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;

namespace Views
{
    public partial class FilterView : UserControl
    {
        public FilterView()
        {
            InitializeComponent();
        }

        // DataGird表示用エンティティ
        public class User
        {
            public string name { get; set; }
            public int age { get; set; }            
        }

        // フィルター設定 イベント
        private void btnSetFilter_Click(object sender, RoutedEventArgs e)
        {
            // データ
            User[] userArray = {
                        new User { name="Taro", age=20},
                        new User { name="Jiro", age=25},
                        new User { name="Saburo", age=30},
                        new User { name="Shiro", age=35},
                        new User { name="Goro", age=40},
                    };

            // PagedCollectionView へ変換してセット
            this.dataGrid1.ItemsSource = new PagedCollectionView(userArray);

            // フィルター設定
            var pcv = this.dataGrid1.ItemsSource as PagedCollectionView;
            if (pcv != null && pcv.CanFilter == true)
            {
                // フィルター条件
                pcv.Filter = (o) => (o as User).age >= 30);
            }
        }

        // フィルター解除 イベント
        private void btnClearFilter_Click(object sender, RoutedEventArgs e)
        {
            // フィルター解除
            var pcv = this.dataGrid1.ItemsSource as PagedCollectionView;
            if (pcv != null)
            {
                pcv.Filter = null;
            }
        }
    }
}

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中