ナビゲーション リンクのスキップ
 新機能 の展開 新機能
 InputMan連携 の展開 InputMan連携
 マルチタッチ機能 の展開 マルチタッチ機能
 セル、行、列、ヘッダ の展開 セル、行、列、ヘッダ
 シート の展開 シート
 スタイル の展開 スタイル
 選択 の展開 選択
 セル型 の展開 セル型
 編集 の展開 編集
 ソート の縮小 ソート
 フィルタリング の展開 フィルタリング
 グループ化 の展開 グループ化
 ページング の展開 ページング
 スクロール の展開 スクロール
 データ連結 の展開 データ連結
 階層表示 の展開 階層表示
 コマンドバー の展開 コマンドバー
 チャート の展開 チャート
 数式 の展開 数式
 インポート/エクスポート の展開 インポート/エクスポート
 クライアント側スクリプト の展開 クライアント側スクリプト

自動ソート結果をカスタマイズ

自動ソート(列ヘッダのダブルクリック)時に独自のソートを実行したい場合、SortColumnCommnadイベントのイベント引数 e の Handled プロパティをtrueに設定することで自動ソートのデフォルトの動作をキャンセルし、 SortInfoクラスを利用した独自のソートを組み込むことができます。

このサンプルではSortColumnCommnadイベントで、ソートキーを変更しています。 第1ソートキーはクリックされた列とし、第2ソートキーを「ID」列の昇順に設定しています。 この設定により、列ヘッダをクリックされた場合は、常にクリックされた列と「ID」列の昇順にソートされます。 (デフォルト動作はクリックされた列のみをソートキーとしてソートします。)

なお、自動ソートをカスタマイズした場合、ソートインジケータの表示もキャンセルされてしまうため、イメージ型セルを設定し、インジケータを表示するよう処理しています。
 
ID
氏名
カナ
生年月日
性別
血液型
部署
入社日
メールアドレス
11001亀甲 滋万キコウ シゲマ1950/02/04A人事部1972/04/01sigema_kikou@abc.co.jp
21002寒田 希世カンダ キヨ1959/06/28B人事部1981/04/01kiyo_kanda@bbb.or.jp
31003小和瀬 澄オワセ キヨ1969/03/06A人事部1991/04/01kiyo_owase@aaa.co.jp
41004宇夫 早余子ウブ サヨコ1976/07/28O人事部1998/04/01sayoko_ubu@bbb.or.jp
51005宇田津 聖智ウダツ キヨトモ1965/09/04A営業部1987/04/01kiyotomo_udatu@abc.co.jp
61006茨城 昭児イバラキ ショウジ1963/04/28O営業部1985/04/01shouzi_ibaraki@xyz.ne.jp
71007石ヶ休 椎茄イシガキュウ シイナ1953/02/21O営業部1975/04/01siina_isigagyuu@abc.co.jp
81008赤司 恵治郎アカツカサ ケイジロウ1968/08/02O経理部1990/04/01keizirou_akatukasa@abc.co.jp
91009小橋 仰一オハシ ギョウイチ1972/03/02B経理部1994/04/01gyouiti_ohasi@abc.co.jp
101010一重 公大イチジュウ コウダイ1964/04/19B経理部1986/04/01koudai_itizyuu@xyz.ne.jp
111011稲並 勝五郎イナミ ショウゴロウ1962/02/18A営業部1984/04/01shougorou_inami@bbb.or.jp
121012穎原 紀代一エイハラ キヨカズ1965/02/13O営業部1987/04/01kiyokazu_eihara@bbb.or.jp

ソースコード

別ウィンドウで表示
using System;
using System.Data;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Configuration;

public partial class customautosort : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack) return;

        // データ連結
        DataSet ds = new DataSet();
        ds.ReadXml(MapPath("../App_Data/data.xml"));
        FpSpread1.DataSource = ds;
        
        // SPREAD初期化
        InitSpread(FpSpread1.Sheets[0]);
    }

    private void InitSpread(FarPoint.Web.Spread.SheetView sheet)
    {
        // SPREAD設定
        FpSpread1.CommandBar.Visible = false;
        FpSpread1.CssClass = "spreadStyle";
        FpSpread1.UseClipboard = false;

        // フォントサイズの設定
        sheet.DefaultStyle.Font.Size = FontUnit.Parse("80%");
        sheet.ColumnHeader.DefaultStyle.Font.Size = FontUnit.Parse("80%");
        sheet.RowHeader.DefaultStyle.Font.Size = FontUnit.Parse("80%");
        sheet.SheetCorner.DefaultStyle.Font.Size = FontUnit.Parse("80%");

        // シート設定
        sheet.PageSize = sheet.RowCount;

        // 列幅の設定
        sheet.Columns[0].Width = 36;
        sheet.Columns[1].Width = 88;
        sheet.Columns[2].Width = 91;
        sheet.Columns[3].Width = 80;
        sheet.Columns[4].Width = 50;
        sheet.Columns[5].Width = 60;
        sheet.Columns[6].Width = 50;
        sheet.Columns[7].Width = 80;
        sheet.Columns[8].Width = 181;

        // 縦方向の揃え位置を中央に設定
        sheet.DefaultStyle.VerticalAlign = VerticalAlign.Middle;

        // 自動ソート機能を有効化
        FpSpread1.ActiveSheetView.AllowSort = true;

        // 列ヘッダにカスタムイメージ型セルを設定
        for (int i = 0; i < FpSpread1.ActiveSheetView.ColumnCount; i++)
        {
            FpSpread1.ActiveSheetView.ColumnHeader.Columns[i].CellType = new FarPoint.Web.Spread.ImageCellType();
        }
    }

    protected void FpSpread1_SortColumnCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
    {
        int col = Convert.ToInt32(e.CommandArgument);
        
        // ソート情報の作成
        FarPoint.Web.Spread.SortInfo[] sinfo = new FarPoint.Web.Spread.SortInfo[2];

        // ソートキーを「(クリックされた列)」「ID」の順で設定
        FarPoint.Web.Spread.ImageCellType ic 
            = (FarPoint.Web.Spread.ImageCellType)e.SheetView.ColumnHeader.Columns[col].CellType;      
      if (ic.ImageUrl == "uparrow.gif")
        {
            // 降順のソート情報を設定
            sinfo[0] = new FarPoint.Web.Spread.SortInfo(col, false);
            sinfo[1] = new FarPoint.Web.Spread.SortInfo(0, true);
            ic.ImageUrl = "downarrow.gif";
        }
        else
        {
            // 昇順のソート情報を設定
            sinfo[0] = new FarPoint.Web.Spread.SortInfo(col, true);
            sinfo[1] = new FarPoint.Web.Spread.SortInfo(0, true);
            ic.ImageUrl = "uparrow.gif";
        }

        for (int i = 0; i < FpSpread1.ActiveSheetView.ColumnCount; i++)
        {
            if (i != col)
            {
                FarPoint.Web.Spread.ImageCellType oc 
                    = (FarPoint.Web.Spread.ImageCellType)e.SheetView.ColumnHeader.Columns[i].CellType;
                oc.ImageUrl = null;
            }
        }

        // 複数のソートキーでソートを実行
        FpSpread1.ActiveSheetView.SortRows(0, FpSpread1.ActiveSheetView.RowCount, sinfo);
        // デフォルトソート動作をキャンセル
        e.Handled = true;
    }
}

Partial Public Class customautosort
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If IsPostBack Then
            Return
        End If

        ' データ連結
        Dim ds As New System.Data.DataSet()
        ds.ReadXml(MapPath("../App_Data/data.xml"))
        FpSpread1.DataSource = ds

        ' SPREAD初期化
        InitSpread(FpSpread1.Sheets(0))
    End Sub

    Private Sub InitSpread(ByVal sheet As FarPoint.Web.Spread.SheetView)
        ' SPREAD設定
        FpSpread1.CommandBar.Visible = False
        FpSpread1.CssClass = "spreadStyle"
        FpSpread1.UseClipboard = False

        ' フォントサイズの設定
        sheet.DefaultStyle.Font.Size = FontUnit.Parse("80%")
        sheet.ColumnHeader.DefaultStyle.Font.Size = FontUnit.Parse("80%")
        sheet.RowHeader.DefaultStyle.Font.Size = FontUnit.Parse("80%")
        sheet.SheetCorner.DefaultStyle.Font.Size = FontUnit.Parse("80%")

        ' シート設定
        sheet.PageSize = sheet.RowCount

        ' 列幅の設定
        sheet.Columns(0).Width = 36
        sheet.Columns(1).Width = 88
        sheet.Columns(2).Width = 91
        sheet.Columns(3).Width = 80
        sheet.Columns(4).Width = 50
        sheet.Columns(5).Width = 60
        sheet.Columns(6).Width = 50
        sheet.Columns(7).Width = 80
        sheet.Columns(8).Width = 181

        ' 縦方向の揃え位置を中央に設定
        sheet.DefaultStyle.VerticalAlign = VerticalAlign.Middle

        ' 自動ソート機能を有効化
        FpSpread1.ActiveSheetView.AllowSort = True

        ' 列ヘッダにカスタムイメージ型セルを設定
        For i As Integer = 0 To FpSpread1.ActiveSheetView.ColumnCount - 1
            FpSpread1.ActiveSheetView.ColumnHeader.Columns(i).CellType = New FarPoint.Web.Spread.ImageCellType()
        Next
    End Sub

    Protected Sub FpSpread1_SortColumnCommand(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.SortColumnCommand
        Dim col As Integer = Convert.ToInt32(e.CommandArgument)

        ' ソート情報の作成
        Dim sinfo As FarPoint.Web.Spread.SortInfo() = New FarPoint.Web.Spread.SortInfo(1) {}

        ' ソートキーを「(クリックされた列)」「ID」の順で設定
        Dim ic As FarPoint.Web.Spread.ImageCellType = DirectCast(e.SheetView.ColumnHeader.Columns(col).CellType, FarPoint.Web.Spread.ImageCellType)
        If ic.ImageUrl = "uparrow.gif" Then
            ' 降順のソート情報を設定
            sinfo(0) = New FarPoint.Web.Spread.SortInfo(col, False)
            sinfo(1) = New FarPoint.Web.Spread.SortInfo(0, True)
            ic.ImageUrl = "downarrow.gif"
        Else
            ' 昇順のソート情報を設定
            sinfo(0) = New FarPoint.Web.Spread.SortInfo(col, True)
            sinfo(1) = New FarPoint.Web.Spread.SortInfo(0, True)
            ic.ImageUrl = "uparrow.gif"
        End If

        For i As Integer = 0 To FpSpread1.ActiveSheetView.ColumnCount - 1
            If i <> col Then
                Dim oc As FarPoint.Web.Spread.ImageCellType = DirectCast(e.SheetView.ColumnHeader.Columns(i).CellType, FarPoint.Web.Spread.ImageCellType)
                oc.ImageUrl = Nothing
            End If
        Next

        ' 複数のソートキーでソートを実行
        FpSpread1.ActiveSheetView.SortRows(0, FpSpread1.ActiveSheetView.RowCount, sinfo)
        ' デフォルトソート動作をキャンセル
        e.Handled = True
    End Sub
End Class
<%@ Page MasterPageFile="~/MasterPage.master" Language="c#" AutoEventWireup="true" 
         Inherits="customautosort" CodeFile="customautosort.aspx.cs" %>

<%@ Register Assembly="FarPoint.Web.SpreadJ" Namespace="FarPoint.Web.Spread" TagPrefix="FarPoint" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <farpoint:FpSpread ID="FpSpread1" runat="server" BorderColor="#A0A0A0" BorderStyle="Solid"
        BorderWidth="1px" onsortcolumncommand="FpSpread1_SortColumnCommand">
        <CommandBar BackColor="#F6F6F6" ButtonFaceColor="Control" ButtonHighlightColor="ControlLightLight"
            ButtonShadowColor="ControlDark" />
        <Sheets>
            <farpoint:SheetView SheetName="Sheet1">
            </farpoint:SheetView>
        </Sheets>
    </farpoint:FpSpread>
</asp:Content>