GridView自带了数据排序功能。在设计视图下,只能对GridView的排序数据列和排序方向进行静态设置。在后台程序中,则需要用
Attributes方式对GridView的这两个属性进行动态设置。
示例如下:
(前台)
前台注意点:
需要对GridView启用AllowSorting、设置OnSorting事件,对需要排序的列设定SortExpression属性。
(后台)
示例工程:
/Files/heekui/GridViewSort.rar
示例如下:
(前台)
<%
@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default"
%>
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > 无标题页 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< asp:GridView ID ="GridView1" runat ="server" AutoGenerateColumns ="False" CellPadding ="4" ForeColor ="#333333" GridLines ="None" AllowSorting ="True" OnSorting ="GridView1_Sorting" >
< FooterStyle BackColor ="#507CD1" Font-Bold ="True" ForeColor ="White" />
< RowStyle BackColor ="#EFF3FB" />
< Columns >
< asp:BoundField DataField ="id" HeaderText ="ID" SortExpression ="id" />
< asp:BoundField DataField ="name" HeaderText ="NAME" SortExpression ="name" />
< asp:BoundField DataField ="age" HeaderText ="AGE" SortExpression ="age" />
</ Columns >
< PagerStyle BackColor ="#2461BF" ForeColor ="White" HorizontalAlign ="Center" />
< SelectedRowStyle BackColor ="#D1DDF1" Font-Bold ="True" ForeColor ="#333333" />
< HeaderStyle BackColor ="#507CD1" Font-Bold ="True" ForeColor ="White" />
< EditRowStyle BackColor ="#2461BF" />
< AlternatingRowStyle BackColor ="White" />
</ asp:GridView >
</ div >
</ form >
</ body >
</ html >
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > 无标题页 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< asp:GridView ID ="GridView1" runat ="server" AutoGenerateColumns ="False" CellPadding ="4" ForeColor ="#333333" GridLines ="None" AllowSorting ="True" OnSorting ="GridView1_Sorting" >
< FooterStyle BackColor ="#507CD1" Font-Bold ="True" ForeColor ="White" />
< RowStyle BackColor ="#EFF3FB" />
< Columns >
< asp:BoundField DataField ="id" HeaderText ="ID" SortExpression ="id" />
< asp:BoundField DataField ="name" HeaderText ="NAME" SortExpression ="name" />
< asp:BoundField DataField ="age" HeaderText ="AGE" SortExpression ="age" />
</ Columns >
< PagerStyle BackColor ="#2461BF" ForeColor ="White" HorizontalAlign ="Center" />
< SelectedRowStyle BackColor ="#D1DDF1" Font-Bold ="True" ForeColor ="#333333" />
< HeaderStyle BackColor ="#507CD1" Font-Bold ="True" ForeColor ="White" />
< EditRowStyle BackColor ="#2461BF" />
< AlternatingRowStyle BackColor ="White" />
</ asp:GridView >
</ div >
</ form >
</ body >
</ html >
前台注意点:
需要对GridView启用AllowSorting、设置OnSorting事件,对需要排序的列设定SortExpression属性。
(后台)
using
System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
if ( ! IsPostBack)
{
// 设定初始排序参数值
// 错误的属性设置方法:SortExpression、SortDirection均是GridView只读属性,无法直接赋值。
// this.GridView1.SortExpression = "id";
// this.GridView1.SortDirection = "ASC";
// 正确的属性设置方法
this .GridView1.Attributes.Add( " SortExpression " , " id " );
this .GridView1.Attributes.Add( " SortDirection " , " ASC " );
// 绑定数据源到GridView
this .BindGridView();
}
}
/// <summary>
/// GridView排序事件
/// </summary>
protected void GridView1_Sorting( object sender, GridViewSortEventArgs e)
{
// 从事件参数获取排序数据列
string sortExpression = e.SortExpression.ToString();
// 假定为排序方向为“顺序”
string sortDirection = " ASC " ;
// “ASC”与事件参数获取到的排序方向进行比较,进行GridView排序方向参数的修改
if (sortExpression == this .GridView1.Attributes[ " SortExpression " ])
{
// 获得下一次的排序状态
sortDirection = ( this .GridView1.Attributes[ " SortDirection " ].ToString() == sortDirection ? " DESC " : " ASC " );
}
// 重新设定GridView排序数据列及排序方向
this .GridView1.Attributes[ " SortExpression " ] = sortExpression;
this .GridView1.Attributes[ " SortDirection " ] = sortDirection;
this .BindGridView();
}
/// <summary>
/// 绑定到GridView
/// </summary>
private void BindGridView()
{
// 获取GridView排序数据列及排序方向
string sortExpression = this .GridView1.Attributes[ " SortExpression " ];
string sortDirection = this .GridView1.Attributes[ " SortDirection " ];
// 调用业务数据获取方法
DataTable dtBind = this .getDB();
// 根据GridView排序数据列及排序方向设置显示的默认数据视图
if (( ! string .IsNullOrEmpty(sortExpression)) && ( ! string .IsNullOrEmpty(sortDirection)))
{
dtBind.DefaultView.Sort = string .Format( " {0} {1} " , sortExpression, sortDirection);
}
// GridView绑定并显示数据
this .GridView1.DataSource = dtBind;
this .GridView1.DataBind();
}
/// <summary>
/// 获取数据源的方法
/// </summary>
/// <returns> 数据源 </returns>
private DataTable getDB()
{
DataTable dt = new DataTable();
dt.Columns.Add( " id " );
dt.Columns.Add( " name " );
dt.Columns.Add( " age " );
dt.Rows.Add( new object [] { " 000001 " , " hekui " , " 26 " });
dt.Rows.Add( new object [] { " 000002 " , " zhangyu " , " 26 " });
dt.Rows.Add( new object [] { " 000003 " , " zhukundian " , " 27 " });
dt.Rows.Add( new object [] { " 000004 " , " liyang " , " 25 " });
dt.Rows.Add( new object [] { " 000005 " , " caili " , " 27 " });
return dt;
}
}
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
if ( ! IsPostBack)
{
// 设定初始排序参数值
// 错误的属性设置方法:SortExpression、SortDirection均是GridView只读属性,无法直接赋值。
// this.GridView1.SortExpression = "id";
// this.GridView1.SortDirection = "ASC";
// 正确的属性设置方法
this .GridView1.Attributes.Add( " SortExpression " , " id " );
this .GridView1.Attributes.Add( " SortDirection " , " ASC " );
// 绑定数据源到GridView
this .BindGridView();
}
}
/// <summary>
/// GridView排序事件
/// </summary>
protected void GridView1_Sorting( object sender, GridViewSortEventArgs e)
{
// 从事件参数获取排序数据列
string sortExpression = e.SortExpression.ToString();
// 假定为排序方向为“顺序”
string sortDirection = " ASC " ;
// “ASC”与事件参数获取到的排序方向进行比较,进行GridView排序方向参数的修改
if (sortExpression == this .GridView1.Attributes[ " SortExpression " ])
{
// 获得下一次的排序状态
sortDirection = ( this .GridView1.Attributes[ " SortDirection " ].ToString() == sortDirection ? " DESC " : " ASC " );
}
// 重新设定GridView排序数据列及排序方向
this .GridView1.Attributes[ " SortExpression " ] = sortExpression;
this .GridView1.Attributes[ " SortDirection " ] = sortDirection;
this .BindGridView();
}
/// <summary>
/// 绑定到GridView
/// </summary>
private void BindGridView()
{
// 获取GridView排序数据列及排序方向
string sortExpression = this .GridView1.Attributes[ " SortExpression " ];
string sortDirection = this .GridView1.Attributes[ " SortDirection " ];
// 调用业务数据获取方法
DataTable dtBind = this .getDB();
// 根据GridView排序数据列及排序方向设置显示的默认数据视图
if (( ! string .IsNullOrEmpty(sortExpression)) && ( ! string .IsNullOrEmpty(sortDirection)))
{
dtBind.DefaultView.Sort = string .Format( " {0} {1} " , sortExpression, sortDirection);
}
// GridView绑定并显示数据
this .GridView1.DataSource = dtBind;
this .GridView1.DataBind();
}
/// <summary>
/// 获取数据源的方法
/// </summary>
/// <returns> 数据源 </returns>
private DataTable getDB()
{
DataTable dt = new DataTable();
dt.Columns.Add( " id " );
dt.Columns.Add( " name " );
dt.Columns.Add( " age " );
dt.Rows.Add( new object [] { " 000001 " , " hekui " , " 26 " });
dt.Rows.Add( new object [] { " 000002 " , " zhangyu " , " 26 " });
dt.Rows.Add( new object [] { " 000003 " , " zhukundian " , " 27 " });
dt.Rows.Add( new object [] { " 000004 " , " liyang " , " 25 " });
dt.Rows.Add( new object [] { " 000005 " , " caili " , " 27 " });
return dt;
}
}
示例工程:
/Files/heekui/GridViewSort.rar