列ヘッダダブルクリックによる自動ソート実行時のソート結果を変更したい

文書番号 : 21845     文書種別 : 使用方法     最終更新日 : 2006/06/23
文書を印刷する
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
SortColumnCommnadイベントのイベント引数 e の Handled プロパティをTrueに設定することで自動ソートのデフォルトの動作をキャンセルすることができます。

下記サンプルコードではSortColumnCommnadイベントで1行目を除く行範囲を指定し、ソートを実行しています。最後にe.HandledをTrueに設定し、デフォルトのソート動作をキャンセルしています。
この場合、ソートインジケータの表示もキャンセルされてしまうため、ここではカスタムイメージ型セルを設定し、インジケータを表示するよう処理しています。

  メモメモ
  • 既存クラスの継承は.NETアプリケーション開発における一般的な手法です。継承方法の詳細についてはMSDNライブラリをご参照ください。(既存クラスのカスタマイズ方法については弊社サポートサービス対象外となります)

【VB サンプルコード】
-----------------------------------------------
Webフォームクラス
-----------------------------------------------
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    If IsPostBack Then Return

    Dim ROWCOUNT As Int32 = 10
    FpSpread1.ActiveSheetView.RowCount = ROWCOUNT

    '2列目にテストデータを設定
    Dim i As Int32
    For i = 0 To FpSpread1.ActiveSheetView.RowCount - 1
      FpSpread1.ActiveSheetView.Cells(i, 1).Value = i + 1
    Next

    FpSpread1.ActiveSheetView.AllowSort = True

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

  Private Sub FpSpread1_SortColumnCommand(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.SortColumnCommand
    Dim col As Int32 = CInt(e.CommandArgument)
    'ソート情報の作成
    Dim sinfo(1) As FarPoint.Web.Spread.SortInfo
    Dim ic As MyImageCell = CType(e.SheetView.ColumnHeader.Columns(col).CellType, MyImageCell)

    If ic.ImageUrl = "/fp_client/fpspread/2_5_1004_2002/img/uparrow.gif" Then
      '降順のソート情報を設定
      sinfo(0) = New FarPoint.Web.Spread.SortInfo(col, False)
      ic.ImageUrl = "/fp_client/fpspread/2_5_1004_2002/img/downarrow.gif"
    Else
      '昇順のソート情報を設定
      sinfo(0) = New FarPoint.Web.Spread.SortInfo(col, True)
      ic.ImageUrl = "/fp_client/fpspread/2_5_1004_2002/img/uparrow.gif"
    End If

    '行範囲を指定してソートを実行
    FpSpread1.ActiveSheetView.SortRows(1, FpSpread1.ActiveSheetView.RowCount - 1, sinfo)
    'デフォルトソート動作をキャンセル
    e.Handled = True
  End Sub

------------------------------------
カスタムイメージ型セル
------------------------------------
<Serializable()> Public Class MyImageCell
  Inherits ImageCellType

  Public Overrides Function PaintCell(ByVal id As String, ByVal parent As System.Web.UI.WebControls.TableCell, ByVal style As FarPoint.Web.Spread.Appearance, ByVal margin As FarPoint.Web.Spread.Inset, ByVal value As Object, ByVal upperLevel As Boolean) As System.Web.UI.Control
    Dim arr() As String = id.Split(",".ToCharArray)
    Dim jscript As String = "__doPostBack(''FpSpread1'',''SortColumn," + arr(1) + "'')"
    parent.Attributes.Add("ondblclick", jscript)
    Dim p As Panel = CType(MyBase.PaintCell(id, parent, style, margin, value, upperLevel), Panel)
    Return p
  End Function
End Class


【C# サンプルコード】
-----------------------------------------------
Webフォームクラス
-----------------------------------------------
    private void Page_Load(object sender, System.EventArgs e)
    {
      if (IsPostBack)return;

      int ROWCOUNT=10;
      FpSpread1.ActiveSheetView.RowCount=ROWCOUNT;

      //2列目にテストデータを設定
      for(int i=0;i<FpSpread1.ActiveSheetView.RowCount;i++)
        FpSpread1.ActiveSheetView.Cells[i,1].Value=i+1;

      FpSpread1.ActiveSheetView.AllowSort=true;

      //列ヘッダにカスタムイメージ型セルを設定
      for(int i=0i;<FpSpread1.ActiveSheetView.ColumnCount;i++)
        FpSpread1.ActiveSheetView.ColumnHeader.Columns[i].CellType=new MyImageType();
    }
    private void FpSpread1_SortColumnCommand(object sender, SpreadCommandEventArgs e)
    {
      int col=Convert.ToInt32(e.CommandArgument);
      //ソート情報の作成
      SortInfo[] sinfo=new SortInfo[1];
      MyImageType ic=(MyImageType)e.SheetView.ColumnHeader.Columns[col].CellType;

      if(ic.ImageUrl=="/fp_client/fpspread/2_5_1004_2002/img/uparrow.gif")
      {
        //降順のソート情報を設定
        sinfo[0]=new SortInfo(col,false);
        ic.ImageUrl="/fp_client/fpspread/2_5_1004_2002/img/downarrow.gif";
      }
      else
      {
        //昇順のソート情報を設定
        sinfo[0]=new SortInfo(col,true);
        ic.ImageUrl="/fp_client/fpspread/2_5_1004_2002/img/uparrow.gif";
      }
      //行範囲を指定してソートを実行
      FpSpread1.ActiveSheetView.SortRows(1,FpSpread1.ActiveSheetView.RowCount-1,sinfo);
      //デフォルトソート動作をキャンセル
      e.Handled=true;
    }
------------------------------------
カスタムイメージ型セル
------------------------------------
  [Serializable()]public class MyImageType:ImageCellType
  {
    public override Control PaintCell(string id, TableCell parent, Appearance style, Inset margin, object value, bool upperLevel)
    {
      string[] arr=id.Split(',');
      string jscript="__doPostBack('FpSpread1','SortColumn," + arr[1] + "')";
      parent.Attributes.Add("ondblclick",jscript);
      Panel p=base.PaintCell(id,parent,style,margin,value,upperLevel) as Panel;
      return p;
    }

  }
関連情報
キーワード
一般

この文書は、以前は次のFAQ IDで公開されていました : 9169