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

独自のソートロジックでソート

IComparerの実装クラスを作成し、データの比較方法を定義します。
上記のIComparerオブジェクトを指定してシートのSortRowsメソッドを実行することで独自のソート方法でソートを実行することができます

このサンプルではCompareメソッド内でドメイン部分を抜き出してから、比較することにより、 ボタン押下時にメールアドレスのドメイン部分を対象に昇順・降順でソートしています。
 
 ID氏名カナ生年月日性別血液型メールアドレス
11001亀甲 滋万キコウ シゲマ1950/02/04Asigema_kikou@abc.co.jp
21002寒田 希世カンダ キヨ1959/06/28Bkiyo_kanda@bbb.or.jp
31003小和瀬 澄オワセ キヨ1969/03/06Akiyo_owase@aaa.co.jp
41004宇夫 早余子ウブ サヨコ1976/07/28Osayoko_ubu@bbb.or.jp
51005宇田津 聖智ウダツ キヨトモ1965/09/04Akiyotomo_udatu@abc.co.jp
61006茨城 昭児イバラキ ショウジ1963/04/28Oshouzi_ibaraki@xyz.ne.jp
71007石ヶ休 椎茄イシガキュウ シイナ1953/02/21Osiina_isigagyuu@abc.co.jp
81008赤司 恵治郎アカツカサ ケイジロウ1968/08/02Okeizirou_akatukasa@abc.co.jp
91009小橋 仰一オハシ ギョウイチ1972/03/02Bgyouiti_ohasi@abc.co.jp
101010一重 公大イチジュウ コウダイ1964/04/19Bkoudai_itizyuu@xyz.ne.jp
111011稲並 勝五郎イナミ ショウゴロウ1962/02/18Ashougorou_inami@bbb.or.jp
121012穎原 紀代一エイハラ キヨカズ1965/02/13Okiyokazu_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 customcomparison : 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]);

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

        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "customcomparisonScript", 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.Columns[6].Visible = false;
        sheet.Columns[7].Visible = false;

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

        Session["asc"] = "false";
    }

    protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
    {
        if (e.CommandName == "customsort")
        {
            Boolean asc;
            if (Convert.ToString(Session["asc"]).Equals("false"))
            {
                asc = true;
                Session["asc"] = "true";
            }
            else
            {
                asc = false;
                Session["asc"] = "false";
            }

            // Comparerを指定してソートを実行
            FpSpread1.ActiveSheetView.SortRows(8, asc, true, new MyStringComparer());
        }        
    }
}

//----------------------------------
//IComparer 実装クラス
//----------------------------------
public class MyStringComparer : System.Collections.IComparer
{

  public int Compare(object x, object y)
  {
        // ドメイン部分を抜き出し
        string val1 = Convert.ToString(x).Substring(Convert.ToString(x).IndexOf("@") + 1);
        string val2 = Convert.ToString(y).Substring(Convert.ToString(y).IndexOf("@") + 1);

    int compareResult;
        compareResult = string.Compare(val1, val2, false);

    return compareResult;
  }
}

Partial Public Class customcomparison
    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))

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

        ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "customcomparisonScript", 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.Columns(6).Visible = False
        sheet.Columns(7).Visible = False

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

        Session("asc") = "false"
    End Sub

    Protected Sub FpSpread1_ButtonCommand(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.ButtonCommand
        If e.CommandName = "customsort" Then
            Dim asc As [Boolean]
            If Convert.ToString(Session("asc")).Equals("false") Then
                asc = True
                Session("asc") = "true"
            Else
                asc = False
                Session("asc") = "false"
            End If

            ' Comparerを指定してソートを実行
            FpSpread1.ActiveSheetView.SortRows(8, asc, True, New MyStringComparer())
        End If
    End Sub
End Class

'----------------------------------
'IComparer 実装クラス
'----------------------------------
Public Class MyStringComparer
    Implements System.Collections.IComparer

    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements Collections.IComparer.Compare

        ' ドメイン部分を抜き出し
        Dim val1 As String = Convert.ToString(x).Substring(Convert.ToString(x).IndexOf("@") + 1)
        Dim val2 As String = Convert.ToString(y).Substring(Convert.ToString(y).IndexOf("@") + 1)

        Dim compareResult As Integer
        compareResult = String.Compare(val1, val2, False)

        Return compareResult
    End Function

End Class
<%@ Page MasterPageFile="~/MasterPage.master" Language="c#" AutoEventWireup="true" 
         Inherits="customcomparison" CodeFile="customcomparison.aspx.cs" %>

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

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <input id="Button1" type="button" value="メールアドレスのドメインでソート" onclick="customsort();" />&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>