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

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>