[GcSpreadGrid] 空白セルを含めてソートを行う方法

文書番号 : 85095     文書種別 : 使用方法     登録日 : 2020/05/21     最終更新日 : 2020/05/21
文書を印刷する
対象製品
SPREAD for WPF 3.0J
詳細
列ヘッダのクリックによる並び替え操作は、既定では、空白セルが昇順/降順のどちらの場合も常に最下行に移動します。この動作を、昇順の場合は空白セルが先頭に移動し、降順の場合は末尾に移動するように変更するには、DefaultSortDescriptionプロパティが参照するSpreadSortDescriptionクラスを使用して、比較方法をカスタマイズします。また、比較方法の定義を、SpreadSortDescriptionクラスのComparerプロパティで行います。

下記のサンプルコードのように、PreviewMouseLeftButtonUpイベントなどで、カスタマイズしたソートを実行します。

◎サンプルコード(C#)
using GrapeCity.Windows.SpreadGrid;

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        gcSpreadGrid1.CanUserSortColumns = false;

        //昇順
        gcSpreadGrid1.SortDescriptions.Add(new SpreadSortDescription()
        {
            Comparer = new MyComparer(),
            ColumnIndex = 0,
            Direction = System.ComponentModel.ListSortDirection.Ascending
        });
    }

    private void gcSpreadGrid1_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
        HitTestInfo hinfo = gcSpreadGrid1.HitTest(e.GetPosition(gcSpreadGrid1));
        if (hinfo is CellHitTestInfo)
        {
            CellHitTestInfo cellinfo = (CellHitTestInfo)hinfo;
            if (cellinfo.Area == SpreadArea.ColumnHeader)
                if (cellinfo.ColumnIndex == 0)
                {
                    if (gcSpreadGrid1.SortDescriptions[0].Direction == System.ComponentModel.ListSortDirection.Ascending)
                    {
                        gcSpreadGrid1.SortDescriptions.Reset();
                        //降順
                        gcSpreadGrid1.SortDescriptions.Add(new SpreadSortDescription()
                        {
                            Comparer = new MyComparer(),
                            ColumnIndex = 0,
                            Direction = System.ComponentModel.ListSortDirection.Descending
                        });
                    }
                    else
                    {
                        gcSpreadGrid1.SortDescriptions.Reset();
                        //昇順
                        gcSpreadGrid1.SortDescriptions.Add(new SpreadSortDescription()
                        {
                            Comparer = new MyComparer(),
                            ColumnIndex = 0,
                            Direction = System.ComponentModel.ListSortDirection.Ascending
                        });
                    }
                }
        }
    }
}

public class MyComparer : IComparer
{
    public int Compare(object x, object y)
    {
        if (x == null)
        {
            return -1;
        }
        return Comparer.Default.Compare(x, y);
    }
}