自動ソート結果をカスタマイズ
自動ソート(列ヘッダのダブルクリック)時に独自のソートを実行したい場合、SortColumnCommnadイベントのイベント引数 e の Handled プロパティをtrueに設定することで自動ソートのデフォルトの動作をキャンセルし、
SortInfoクラスを利用した独自のソートを組み込むことができます。
このサンプルではSortColumnCommnadイベントで、ソートキーを変更しています。
第1ソートキーはクリックされた列とし、第2ソートキーを「ID」列の昇順に設定しています。
この設定により、列ヘッダをクリックされた場合は、常にクリックされた列と「ID」列の昇順にソートされます。
(デフォルト動作はクリックされた列のみをソートキーとしてソートします。)
なお、自動ソートをカスタマイズした場合、ソートインジケータの表示もキャンセルされてしまうため、イメージ型セルを設定し、インジケータを表示するよう処理しています。
|
ID
|
氏名
|
カナ
|
生年月日
|
性別
|
血液型
|
部署
|
入社日
|
メールアドレス
|
1 | 1001 | 亀甲 滋万 | キコウ シゲマ | 1950/02/04 | 男 | A | 人事部 | 1972/04/01 | sigema_kikou@abc.co.jp |
2 | 1002 | 寒田 希世 | カンダ キヨ | 1959/06/28 | 女 | B | 人事部 | 1981/04/01 | kiyo_kanda@bbb.or.jp |
3 | 1003 | 小和瀬 澄 | オワセ キヨ | 1969/03/06 | 男 | A | 人事部 | 1991/04/01 | kiyo_owase@aaa.co.jp |
4 | 1004 | 宇夫 早余子 | ウブ サヨコ | 1976/07/28 | 女 | O | 人事部 | 1998/04/01 | sayoko_ubu@bbb.or.jp |
5 | 1005 | 宇田津 聖智 | ウダツ キヨトモ | 1965/09/04 | 男 | A | 営業部 | 1987/04/01 | kiyotomo_udatu@abc.co.jp |
6 | 1006 | 茨城 昭児 | イバラキ ショウジ | 1963/04/28 | 男 | O | 営業部 | 1985/04/01 | shouzi_ibaraki@xyz.ne.jp |
7 | 1007 | 石ヶ休 椎茄 | イシガキュウ シイナ | 1953/02/21 | 男 | O | 営業部 | 1975/04/01 | siina_isigagyuu@abc.co.jp |
8 | 1008 | 赤司 恵治郎 | アカツカサ ケイジロウ | 1968/08/02 | 男 | O | 経理部 | 1990/04/01 | keizirou_akatukasa@abc.co.jp |
9 | 1009 | 小橋 仰一 | オハシ ギョウイチ | 1972/03/02 | 男 | B | 経理部 | 1994/04/01 | gyouiti_ohasi@abc.co.jp |
10 | 1010 | 一重 公大 | イチジュウ コウダイ | 1964/04/19 | 男 | B | 経理部 | 1986/04/01 | koudai_itizyuu@xyz.ne.jp |
11 | 1011 | 稲並 勝五郎 | イナミ ショウゴロウ | 1962/02/18 | 男 | A | 営業部 | 1984/04/01 | shougorou_inami@bbb.or.jp |
12 | 1012 | 穎原 紀代一 | エイハラ キヨカズ | 1965/02/13 | 男 | O | 営業部 | 1987/04/01 | kiyokazu_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 customautosort : 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]);
}
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 = 50;
sheet.Columns[5].Width = 60;
sheet.Columns[6].Width = 50;
sheet.Columns[7].Width = 80;
sheet.Columns[8].Width = 181;
// 縦方向の揃え位置を中央に設定
sheet.DefaultStyle.VerticalAlign = VerticalAlign.Middle;
// 自動ソート機能を有効化
FpSpread1.ActiveSheetView.AllowSort = true;
// 列ヘッダにカスタムイメージ型セルを設定
for (int i = 0; i < FpSpread1.ActiveSheetView.ColumnCount; i++)
{
FpSpread1.ActiveSheetView.ColumnHeader.Columns[i].CellType = new FarPoint.Web.Spread.ImageCellType();
}
}
protected void FpSpread1_SortColumnCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
{
int col = Convert.ToInt32(e.CommandArgument);
// ソート情報の作成
FarPoint.Web.Spread.SortInfo[] sinfo = new FarPoint.Web.Spread.SortInfo[2];
// ソートキーを「(クリックされた列)」「ID」の順で設定
FarPoint.Web.Spread.ImageCellType ic
= (FarPoint.Web.Spread.ImageCellType)e.SheetView.ColumnHeader.Columns[col].CellType;
if (ic.ImageUrl == "uparrow.gif")
{
// 降順のソート情報を設定
sinfo[0] = new FarPoint.Web.Spread.SortInfo(col, false);
sinfo[1] = new FarPoint.Web.Spread.SortInfo(0, true);
ic.ImageUrl = "downarrow.gif";
}
else
{
// 昇順のソート情報を設定
sinfo[0] = new FarPoint.Web.Spread.SortInfo(col, true);
sinfo[1] = new FarPoint.Web.Spread.SortInfo(0, true);
ic.ImageUrl = "uparrow.gif";
}
for (int i = 0; i < FpSpread1.ActiveSheetView.ColumnCount; i++)
{
if (i != col)
{
FarPoint.Web.Spread.ImageCellType oc
= (FarPoint.Web.Spread.ImageCellType)e.SheetView.ColumnHeader.Columns[i].CellType;
oc.ImageUrl = null;
}
}
// 複数のソートキーでソートを実行
FpSpread1.ActiveSheetView.SortRows(0, FpSpread1.ActiveSheetView.RowCount, sinfo);
// デフォルトソート動作をキャンセル
e.Handled = true;
}
}
|
Partial Public Class customautosort
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))
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 = 50
sheet.Columns(5).Width = 60
sheet.Columns(6).Width = 50
sheet.Columns(7).Width = 80
sheet.Columns(8).Width = 181
' 縦方向の揃え位置を中央に設定
sheet.DefaultStyle.VerticalAlign = VerticalAlign.Middle
' 自動ソート機能を有効化
FpSpread1.ActiveSheetView.AllowSort = True
' 列ヘッダにカスタムイメージ型セルを設定
For i As Integer = 0 To FpSpread1.ActiveSheetView.ColumnCount - 1
FpSpread1.ActiveSheetView.ColumnHeader.Columns(i).CellType = New FarPoint.Web.Spread.ImageCellType()
Next
End Sub
Protected Sub FpSpread1_SortColumnCommand(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.SortColumnCommand
Dim col As Integer = Convert.ToInt32(e.CommandArgument)
' ソート情報の作成
Dim sinfo As FarPoint.Web.Spread.SortInfo() = New FarPoint.Web.Spread.SortInfo(1) {}
' ソートキーを「(クリックされた列)」「ID」の順で設定
Dim ic As FarPoint.Web.Spread.ImageCellType = DirectCast(e.SheetView.ColumnHeader.Columns(col).CellType, FarPoint.Web.Spread.ImageCellType)
If ic.ImageUrl = "uparrow.gif" Then
' 降順のソート情報を設定
sinfo(0) = New FarPoint.Web.Spread.SortInfo(col, False)
sinfo(1) = New FarPoint.Web.Spread.SortInfo(0, True)
ic.ImageUrl = "downarrow.gif"
Else
' 昇順のソート情報を設定
sinfo(0) = New FarPoint.Web.Spread.SortInfo(col, True)
sinfo(1) = New FarPoint.Web.Spread.SortInfo(0, True)
ic.ImageUrl = "uparrow.gif"
End If
For i As Integer = 0 To FpSpread1.ActiveSheetView.ColumnCount - 1
If i <> col Then
Dim oc As FarPoint.Web.Spread.ImageCellType = DirectCast(e.SheetView.ColumnHeader.Columns(i).CellType, FarPoint.Web.Spread.ImageCellType)
oc.ImageUrl = Nothing
End If
Next
' 複数のソートキーでソートを実行
FpSpread1.ActiveSheetView.SortRows(0, FpSpread1.ActiveSheetView.RowCount, sinfo)
' デフォルトソート動作をキャンセル
e.Handled = True
End Sub
End Class
|
<%@ Page MasterPageFile="~/MasterPage.master" Language="c#" AutoEventWireup="true"
Inherits="customautosort" CodeFile="customautosort.aspx.cs" %>
<%@ Register Assembly="FarPoint.Web.SpreadJ" Namespace="FarPoint.Web.Spread" TagPrefix="FarPoint" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<farpoint:FpSpread ID="FpSpread1" runat="server" BorderColor="#A0A0A0" BorderStyle="Solid"
BorderWidth="1px" onsortcolumncommand="FpSpread1_SortColumnCommand">
<CommandBar BackColor="#F6F6F6" ButtonFaceColor="Control" ButtonHighlightColor="ControlLightLight"
ButtonShadowColor="ControlDark" />
<Sheets>
<farpoint:SheetView SheetName="Sheet1">
</farpoint:SheetView>
</Sheets>
</farpoint:FpSpread>
</asp:Content>
|