列ヘッダダブルクリックによる自動ソート実行時のソート結果を変更したい
対象製品
SPREAD for .NET 2.5J Web Forms Edition
詳細
SortColumnCommnadイベントのイベント引数 e の Handled プロパティをTrueに設定することで自動ソートのデフォルトの動作をキャンセルすることができます。
下記サンプルコードではSortColumnCommnadイベントで1行目を除く行範囲を指定し、ソートを実行しています。最後にe.HandledをTrueに設定し、デフォルトのソート動作をキャンセルしています。
この場合、ソートインジケータの表示もキャンセルされてしまうため、ここではカスタムイメージ型セルを設定し、インジケータを表示するよう処理しています。
  
メモ
【VB サンプルコード】
【C# サンプルコード】
下記サンプルコードでは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
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;
}
}
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