GridView 内のデータのソートとヘッダ行への矢印の追加

グリッド内の特定のデータを探す、あるいは、データの傾向を把握する、といった目的にはデータの並べ替えが有効です。

GridView にはカラムヘッダーをクリックすることによって、そのカラムのデータを昇順あるいは降順に並べ替える機能があります。

ここでは GridView のソート機能について簡単な例を通して紹介します。

まずは、ここで作成するサンプルを見てください。

カラムの見出しをクリックするたびに、データの昇順、降順のソートが切り替わります。

また、それと共に見出しカラム内の矢印も上下に切り替わっています。

コードは次の通りです。

<%@ Page Language="C#" AutoEventWireup="true" %>
<!DOCTYPE html>
<html>
<head id="Head1" runat="server">
	<style type="text/css">
		
		tr.Header th {
			padding: 2px 18px 2px 18px;
		}

		tr.Header th a {
			color: #000;
			text-decoration: none;
			font-weight: normal;
		}

		tr.Header th a:hover {
			color: #f00;
			text-decoration: underline;
			font-weight: normal;
		}

		th.sortedAscHeader,
		th.sortedDscHeader {
			background-repeat: no-repeat;
			background-position: right;
			padding-right:18px;
		}

		th.sortedAscHeader {
			background-image: url(Images/arrow-down.png);
		}

		th.sortedDscHeader {
			background-image: url(Images/arrow-up.png);
		}
	</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView
	AllowPaging="true"
	PageSize="10"
	AllowSorting="true"
	DataSourceID="NorthwindSqlDataSource"
	ID="GridView1"
	runat="server">
	<SortedAscendingHeaderStyle CssClass="sortedAscHeader"/>
	<SortedDescendingHeaderStyle CssClass="sortedDscHeader" />
	<HeaderStyle CssClass="Header" />
</asp:GridView>
<asp:SqlDataSource
	ID="NorthwindSqlDataSource" 
	SelectCommand="SELECT ProductID, ProductName, UnitPrice FROM Products ORDER BY ProductID"
	ConnectionString="<%$ ConnectionStrings:DB %>"
	RunAt="server" />
</div>
</form>
</body>
</html>

実はソートをするだけなら、GridView の AllowSorting 属性を true にすれば OK です。

しかし、実際それだけだと現在何でどのようにソートしているか不明になってしまうので、矢印も追加しています。

矢印を追加するためには、昇順と降順のときにヘッダーのCSS クラスを切り替えることによって、CSS で背景画像として矢印アイコンを表示しています。 SortedAscendingHeaderStyle と SortedDescendingHeaderStyle にて指定している CssClass がヘッダーのセルに設定されます。

HeaderStyle ではその行 (tr 要素) に CSS クラスが設定されるのに対して、ソートに関する指定はカラムヘッダーのセルであることに注意してください。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 ASP.NET 入門