複数のキーを指定

1つまたは複数の列をキーとしてシートの行の配置を並べ替える場合には、 SortRowsメソッドを使用します。SortRowsメソッドはシート全体や行範囲を指定して並べ替えを行うことができます。
SortInfoオブジェクトを利用することにより、複数のキーでソートすることができます。
列上に同一データが存在する場合のソート結果は保証されないため(並び順不定などの現象が発生)、 このような場合には複数のソート条件を定義するSortInfoオブジェクトをあらかじめ作成しておき、SortRowsメソッド実行時に指定することで対応します。

このサンプルでは、第3ソートキーまで指定することができます。
実行ボタン押下後、サーバー側でソート処理を実行します。
ソート列 並び替え
条件1
条件2
条件3
 
 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 multisortkey : System.Web.UI.Page
{
    DataSet ds = new DataSet();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack) return;

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

        // クライアント側スクリプトの設定
        string clientScript = "<script language=\"JavaScript\">";
        clientScript += "function multisort()";
        clientScript += "{";
        clientScript += "var spread = document.getElementById(\"" + FpSpread1.ClientID + "\");";
        clientScript += "spread.CallBack(\"multisort\");";
        clientScript += "}";
        clientScript += "</script>";

        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "resetsorteddataScript", clientScript, false);
    }

    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 = 36;
        sheet.Columns[5].Width = 46;
        sheet.Columns[6].Width = 49;
        sheet.Columns[7].Width = 80;
        sheet.Columns[8].Width = 181;

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

        // ドロップダウンリストの設定
        ListItem lif = new ListItem("-- 未設定 --", "");
        DDLsort2.Items.Add(lif);
        DDLsort3.Items.Add(lif);

        for (int i = 0; i < FpSpread1.ActiveSheetView.ColumnCount; i++)
        {
            string idx = Convert.ToString(i);

            ListItem li = new ListItem(ds.Tables[0].Columns[i].ColumnName, idx);
            DDLsort1.Items.Add(li);
            DDLsort2.Items.Add(li);
            DDLsort3.Items.Add(li);           
        }
    }

    protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
    {
        if (e.CommandName == "multisort")
        {
            int col1 = Convert.ToInt32(DDLsort1.SelectedValue);

            bool ascending1 = Convert.ToBoolean(Convert.ToInt32(RadioButtonList1.SelectedValue));
            bool ascending2 = Convert.ToBoolean(Convert.ToInt32(RadioButtonList2.SelectedValue));
            bool ascending3 = Convert.ToBoolean(Convert.ToInt32(RadioButtonList3.SelectedValue));

            // 第1ソートキー
            FarPoint.Web.Spread.SortInfo si0 = new FarPoint.Web.Spread.SortInfo(col1, ascending1);

            // 第2ソートキー
            FarPoint.Web.Spread.SortInfo si1;
            if (!DDLsort2.SelectedValue.Equals(""))
            {
                int col2 = Convert.ToInt32(DDLsort2.SelectedValue);
                si1 = new FarPoint.Web.Spread.SortInfo(col2, ascending2);
            }
            else
            {
                si1 = si0;
            }
            // 第3ソートキー
            FarPoint.Web.Spread.SortInfo si2;
            if (!DDLsort3.SelectedValue.Equals(""))
            {
                int col3 = Convert.ToInt32(DDLsort3.SelectedValue);
                si2 = new FarPoint.Web.Spread.SortInfo(col3, ascending3);
            }
            else
            {
                si2 = si0;
            }

            FarPoint.Web.Spread.SortInfo[] si = new FarPoint.Web.Spread.SortInfo[3];
            si[0] = si0;
            si[1] = si1;
            si[2] = si2;

            // ソート実行
            FpSpread1.ActiveSheetView.SortRows(0, FpSpread1.ActiveSheetView.RowCount, si);
        }
    }
}

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

    Private ds As New System.Data.DataSet()

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

        ' データ連結        
        ds.ReadXml(MapPath("../App_Data/data.xml"))
        FpSpread1.DataSource = ds

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

        ' クライアント側スクリプトの設定
        Dim clientScript As String = "<script language=""JavaScript"">"
        clientScript += "function multisort()"
        clientScript += "{"
        clientScript += "var spread = document.getElementById(""" + FpSpread1.ClientID & """);"
        clientScript += "spread.CallBack(""multisort"");"
        clientScript += "}"
        clientScript += "</script>"

        ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "resetsorteddataScript", clientScript, False)
    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 = 36
        sheet.Columns(5).Width = 46
        sheet.Columns(6).Width = 49
        sheet.Columns(7).Width = 80
        sheet.Columns(8).Width = 181

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

        ' ドロップダウンリストの設定
        Dim lif As New ListItem("-- 未設定 --", "")
        DDLsort2.Items.Add(lif)
        DDLsort3.Items.Add(lif)

        For i As Integer = 0 To FpSpread1.ActiveSheetView.ColumnCount - 1
            Dim idx As String = Convert.ToString(i)

            Dim li As New ListItem(ds.Tables(0).Columns(i).ColumnName, idx)
            DDLsort1.Items.Add(li)
            DDLsort2.Items.Add(li)
            DDLsort3.Items.Add(li)
        Next
    End Sub

    Protected Sub FpSpread1_ButtonCommand(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.ButtonCommand
        If e.CommandName = "multisort" Then
            Dim col1 As Integer = Convert.ToInt32(DDLsort1.SelectedValue)

            Dim ascending1 As Boolean = Convert.ToBoolean(Convert.ToInt32(RadioButtonList1.SelectedValue))
            Dim ascending2 As Boolean = Convert.ToBoolean(Convert.ToInt32(RadioButtonList2.SelectedValue))
            Dim ascending3 As Boolean = Convert.ToBoolean(Convert.ToInt32(RadioButtonList3.SelectedValue))

            ' 第1ソートキー
            Dim si0 As New FarPoint.Web.Spread.SortInfo(col1, ascending1)

            ' 第2ソートキー
            Dim si1 As FarPoint.Web.Spread.SortInfo
            If Not DDLsort2.SelectedValue.Equals("") Then
                Dim col2 As Integer = Convert.ToInt32(DDLsort2.SelectedValue)
                si1 = New FarPoint.Web.Spread.SortInfo(col2, ascending2)
            Else
                si1 = si0
            End If
            ' 第3ソートキー
            Dim si2 As FarPoint.Web.Spread.SortInfo
            If Not DDLsort3.SelectedValue.Equals("") Then
                Dim col3 As Integer = Convert.ToInt32(DDLsort3.SelectedValue)
                si2 = New FarPoint.Web.Spread.SortInfo(col3, ascending3)
            Else
                si2 = si0
            End If

            Dim si As FarPoint.Web.Spread.SortInfo() = New FarPoint.Web.Spread.SortInfo(2) {}
            si(0) = si0
            si(1) = si1
            si(2) = si2

            ' ソート実行
            FpSpread1.ActiveSheetView.SortRows(0, FpSpread1.ActiveSheetView.RowCount, si)
        End If
    End Sub
End Class
<%@ Page MasterPageFile="~/MasterPage.master" Language="c#" AutoEventWireup="true" 
         Inherits="multisortkey" CodeFile="multisortkey.aspx.cs" %>

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

<asp:Content ID="Content1" ContentPlaceHolderID="HeaderPlaceHolder1" Runat="Server">
    <style type="text/css">
        .sortkeyDropDownList
        { 
            text-align: center;
            vertical-align: middle; 
            position: relative;
            width: 100%;
        }
        .sortkeyRadioButton
        { 
            text-align: center;
            vertical-align: middle; 
            position: relative;
            width: 100%;
        }
    </style>
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <table border="1" cols="4">
        <tr>
            <td>
            </td>
            <td>
                ソート列
            </td>
            <td>
                並び替え
            </td>
            <td>
            </td>
        </tr>
        <tr>
            <td>
                条件1
            </td>
            <td valign="top">
                <asp:DropDownList ID="DDLsort1" runat="server" AutoPostBack="false" 
                    CssClass="sortkeyDropDownList">
                </asp:DropDownList>                
            </td>
            <td>
                <asp:RadioButtonList ID="RadioButtonList1" runat="server" 
                    RepeatDirection="Horizontal" CssClass="sortkeyRadioButton">
                    <asp:ListItem Selected="True" Value="1">昇順</asp:ListItem>
                    <asp:ListItem Value="0">降順</asp:ListItem>
                </asp:RadioButtonList>
            </td>
            <td rowspan="3" width="100px" style="vertical-align: middle;">
                <input id="Button1" type="button" value="ソートの実行" onclick="multisort();" style="width: 100%; height: 50px;" />
            </td>
        </tr>
        <tr>
            <td>
                条件2
            </td>
            <td valign="top">
                <asp:DropDownList ID="DDLsort2" runat="server" AutoPostBack="false" 
                    CssClass="sortkeyDropDownList">
                </asp:DropDownList>                
            </td>
            <td>
                <asp:RadioButtonList ID="RadioButtonList2" runat="server" 
                    RepeatDirection="Horizontal" CssClass="sortkeyRadioButton">
                    <asp:ListItem Selected="True" Value="1">昇順</asp:ListItem>
                    <asp:ListItem Value="0">降順</asp:ListItem>
                </asp:RadioButtonList>
            </td>
        </tr>
        <tr>
            <td>
                条件3
            </td>
            <td valign="top">
                <asp:DropDownList ID="DDLsort3" runat="server" AutoPostBack="false" 
                    CssClass="sortkeyDropDownList">
                </asp:DropDownList>                
            </td>
            <td>
                <asp:RadioButtonList ID="RadioButtonList3" runat="server" 
                    RepeatDirection="Horizontal" CssClass="sortkeyRadioButton">
                    <asp:ListItem Selected="True" Value="1">昇順</asp:ListItem>
                    <asp:ListItem Value="0">降順</asp:ListItem>
                </asp:RadioButtonList>
            </td>
        </tr>
    </table>&nbsp;
    <farpoint:FpSpread ID="FpSpread1" runat="server" BorderColor="#A0A0A0" BorderStyle="Solid"
        BorderWidth="1px" onbuttoncommand="FpSpread1_ButtonCommand">
        <CommandBar BackColor="#F6F6F6" ButtonFaceColor="Control" ButtonHighlightColor="ControlLightLight"
            ButtonShadowColor="ControlDark" />
        <Sheets>
            <farpoint:SheetView SheetName="Sheet1">
            </farpoint:SheetView>
        </Sheets>
    </farpoint:FpSpread>
</asp:Content>