【Silverlight】 DataGrid に ソートを設定するには

◆ XAML

<UserControl x:Class="Views.SortView "
    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
                <Button Name="btnSetSort" Click="btnSetSort_Click" 
                    Content="ソート設定" Height="30" Width="120"></Button>
                <Button Name="btnClearSort" Click="btnClearSort_Click" 
                    Content="ソート解除" Height="30" Width="120"></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;
using System.ComponentModel;

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

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

        // ソート設定 イベント
        private void btnSetSort_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.CanSort == true)
            {
                // ソート条件
                pcv.SortDescriptions.Add(
                  new SortDescription("name", ListSortDirection.Ascending));
            }
        }

        // ソート解除 イベント
        private void btnClearSort_Click(object sender, RoutedEventArgs e)
        {
            // ソート解除
            var pcv = this.dataGrid1.ItemsSource as PagedCollectionView;
            if (pcv != null)
            {
                pcv.SortDescriptions.Clear();
            }
        }
    }
}

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中