作成日: 2026/06/24 最終更新日: 2026/06/24
文書種別
使用方法
詳細
列ヘッダのクリックによる並び替え操作は、既定では、空白セルが昇順/降順のどちらの場合も常に最下行に移動します。この動作を、昇順の場合は空白セルが先頭に移動し、降順の場合は末尾に移動するように変更するには、DefaultSortDescriptionプロパティが参照するSpreadSortDescriptionクラスを使用して、比較方法をカスタマイズします。また、比較方法の定義を、SpreadSortDescriptionクラスのComparerプロパティで行います。
下記のサンプルコードのように、PreviewMouseLeftButtonUpイベントなどで、カスタマイズしたソートを実行します。
◎サンプルコード(C#)
下記のサンプルコードのように、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);
}
}