|
複数のキーを指定
1つまたは複数の列をキーとしてシートの行の配置を並べ替える場合には、
SortRowsメソッドを使用します。SortRowsメソッドはシート全体や行範囲を指定して並べ替えを行うことができます。
SortInfoオブジェクトを利用することにより、複数のキーでソートすることができます。
列上に同一データが存在する場合のソート結果は保証されないため(並び順不定などの現象が発生)、
このような場合には複数のソート条件を定義するSortInfoオブジェクトをあらかじめ作成しておき、SortRowsメソッド実行時に指定することで対応します。
このサンプルでは、第3ソートキーまで指定することができます。
実行ボタン押下後、サーバー側でソート処理を実行します。
| 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 multisortkey : System.Web.UI.Page
{
DataSet ds = new DataSet();
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;
// データ連結
ds.ReadXml(MapPath("../App_Data/data.xml"));
FpSpread1.DataSource = ds;
// SPREAD初期化
InitSpread(FpSpread1.Sheets[0]);
// クライアント側スクリプトの設定
string clientScript = "<script language=\"JavaScript\">";
clientScript += "function multisort()";
clientScript += "{";
clientScript += "var spread = document.getElementById(\"" + FpSpread1.ClientID + "\");";
clientScript += "spread.CallBack(\"multisort\");";
clientScript += "}";
clientScript += "</script>";
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "resetsorteddataScript", 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.DefaultStyle.VerticalAlign = VerticalAlign.Middle;
// ドロップダウンリストの設定
ListItem lif = new ListItem("-- 未設定 --", "");
DDLsort2.Items.Add(lif);
DDLsort3.Items.Add(lif);
for (int i = 0; i < FpSpread1.ActiveSheetView.ColumnCount; i++)
{
string idx = Convert.ToString(i);
ListItem li = new ListItem(ds.Tables[0].Columns[i].ColumnName, idx);
DDLsort1.Items.Add(li);
DDLsort2.Items.Add(li);
DDLsort3.Items.Add(li);
}
}
protected void FpSpread1_ButtonCommand(object sender, FarPoint.Web.Spread.SpreadCommandEventArgs e)
{
if (e.CommandName == "multisort")
{
int col1 = Convert.ToInt32(DDLsort1.SelectedValue);
bool ascending1 = Convert.ToBoolean(Convert.ToInt32(RadioButtonList1.SelectedValue));
bool ascending2 = Convert.ToBoolean(Convert.ToInt32(RadioButtonList2.SelectedValue));
bool ascending3 = Convert.ToBoolean(Convert.ToInt32(RadioButtonList3.SelectedValue));
// 第1ソートキー
FarPoint.Web.Spread.SortInfo si0 = new FarPoint.Web.Spread.SortInfo(col1, ascending1);
// 第2ソートキー
FarPoint.Web.Spread.SortInfo si1;
if (!DDLsort2.SelectedValue.Equals(""))
{
int col2 = Convert.ToInt32(DDLsort2.SelectedValue);
si1 = new FarPoint.Web.Spread.SortInfo(col2, ascending2);
}
else
{
si1 = si0;
}
// 第3ソートキー
FarPoint.Web.Spread.SortInfo si2;
if (!DDLsort3.SelectedValue.Equals(""))
{
int col3 = Convert.ToInt32(DDLsort3.SelectedValue);
si2 = new FarPoint.Web.Spread.SortInfo(col3, ascending3);
}
else
{
si2 = si0;
}
FarPoint.Web.Spread.SortInfo[] si = new FarPoint.Web.Spread.SortInfo[3];
si[0] = si0;
si[1] = si1;
si[2] = si2;
// ソート実行
FpSpread1.ActiveSheetView.SortRows(0, FpSpread1.ActiveSheetView.RowCount, si);
}
}
}
|
Partial Public Class multisortkey
Inherits System.Web.UI.Page
Private ds As New System.Data.DataSet()
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If IsPostBack Then
Return
End If
' データ連結
ds.ReadXml(MapPath("../App_Data/data.xml"))
FpSpread1.DataSource = ds
' SPREAD初期化
InitSpread(FpSpread1.Sheets(0))
' クライアント側スクリプトの設定
Dim clientScript As String = "<script language=""JavaScript"">"
clientScript += "function multisort()"
clientScript += "{"
clientScript += "var spread = document.getElementById(""" + FpSpread1.ClientID & """);"
clientScript += "spread.CallBack(""multisort"");"
clientScript += "}"
clientScript += "</script>"
ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "resetsorteddataScript", 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.DefaultStyle.VerticalAlign = VerticalAlign.Middle
' ドロップダウンリストの設定
Dim lif As New ListItem("-- 未設定 --", "")
DDLsort2.Items.Add(lif)
DDLsort3.Items.Add(lif)
For i As Integer = 0 To FpSpread1.ActiveSheetView.ColumnCount - 1
Dim idx As String = Convert.ToString(i)
Dim li As New ListItem(ds.Tables(0).Columns(i).ColumnName, idx)
DDLsort1.Items.Add(li)
DDLsort2.Items.Add(li)
DDLsort3.Items.Add(li)
Next
End Sub
Protected Sub FpSpread1_ButtonCommand(ByVal sender As Object, ByVal e As FarPoint.Web.Spread.SpreadCommandEventArgs) Handles FpSpread1.ButtonCommand
If e.CommandName = "multisort" Then
Dim col1 As Integer = Convert.ToInt32(DDLsort1.SelectedValue)
Dim ascending1 As Boolean = Convert.ToBoolean(Convert.ToInt32(RadioButtonList1.SelectedValue))
Dim ascending2 As Boolean = Convert.ToBoolean(Convert.ToInt32(RadioButtonList2.SelectedValue))
Dim ascending3 As Boolean = Convert.ToBoolean(Convert.ToInt32(RadioButtonList3.SelectedValue))
' 第1ソートキー
Dim si0 As New FarPoint.Web.Spread.SortInfo(col1, ascending1)
' 第2ソートキー
Dim si1 As FarPoint.Web.Spread.SortInfo
If Not DDLsort2.SelectedValue.Equals("") Then
Dim col2 As Integer = Convert.ToInt32(DDLsort2.SelectedValue)
si1 = New FarPoint.Web.Spread.SortInfo(col2, ascending2)
Else
si1 = si0
End If
' 第3ソートキー
Dim si2 As FarPoint.Web.Spread.SortInfo
If Not DDLsort3.SelectedValue.Equals("") Then
Dim col3 As Integer = Convert.ToInt32(DDLsort3.SelectedValue)
si2 = New FarPoint.Web.Spread.SortInfo(col3, ascending3)
Else
si2 = si0
End If
Dim si As FarPoint.Web.Spread.SortInfo() = New FarPoint.Web.Spread.SortInfo(2) {}
si(0) = si0
si(1) = si1
si(2) = si2
' ソート実行
FpSpread1.ActiveSheetView.SortRows(0, FpSpread1.ActiveSheetView.RowCount, si)
End If
End Sub
End Class
|
<%@ Page MasterPageFile="~/MasterPage.master" Language="c#" AutoEventWireup="true"
Inherits="multisortkey" CodeFile="multisortkey.aspx.cs" %>
<%@ Register Assembly="FarPoint.Web.SpreadJ" Namespace="FarPoint.Web.Spread" TagPrefix="FarPoint" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeaderPlaceHolder1" Runat="Server">
<style type="text/css">
.sortkeyDropDownList
{
text-align: center;
vertical-align: middle;
position: relative;
width: 100%;
}
.sortkeyRadioButton
{
text-align: center;
vertical-align: middle;
position: relative;
width: 100%;
}
</style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<table border="1" cols="4">
<tr>
<td>
</td>
<td>
ソート列
</td>
<td>
並び替え
</td>
<td>
</td>
</tr>
<tr>
<td>
条件1
</td>
<td valign="top">
<asp:DropDownList ID="DDLsort1" runat="server" AutoPostBack="false"
CssClass="sortkeyDropDownList">
</asp:DropDownList>
</td>
<td>
<asp:RadioButtonList ID="RadioButtonList1" runat="server"
RepeatDirection="Horizontal" CssClass="sortkeyRadioButton">
<asp:ListItem Selected="True" Value="1">昇順</asp:ListItem>
<asp:ListItem Value="0">降順</asp:ListItem>
</asp:RadioButtonList>
</td>
<td rowspan="3" width="100px" style="vertical-align: middle;">
<input id="Button1" type="button" value="ソートの実行" onclick="multisort();" style="width: 100%; height: 50px;" />
</td>
</tr>
<tr>
<td>
条件2
</td>
<td valign="top">
<asp:DropDownList ID="DDLsort2" runat="server" AutoPostBack="false"
CssClass="sortkeyDropDownList">
</asp:DropDownList>
</td>
<td>
<asp:RadioButtonList ID="RadioButtonList2" runat="server"
RepeatDirection="Horizontal" CssClass="sortkeyRadioButton">
<asp:ListItem Selected="True" Value="1">昇順</asp:ListItem>
<asp:ListItem Value="0">降順</asp:ListItem>
</asp:RadioButtonList>
</td>
</tr>
<tr>
<td>
条件3
</td>
<td valign="top">
<asp:DropDownList ID="DDLsort3" runat="server" AutoPostBack="false"
CssClass="sortkeyDropDownList">
</asp:DropDownList>
</td>
<td>
<asp:RadioButtonList ID="RadioButtonList3" runat="server"
RepeatDirection="Horizontal" CssClass="sortkeyRadioButton">
<asp:ListItem Selected="True" Value="1">昇順</asp:ListItem>
<asp:ListItem Value="0">降順</asp:ListItem>
</asp:RadioButtonList>
</td>
</tr>
</table>
<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>
|
|
|
|