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

複数のキーを指定

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>