gridview自定义排序

效果如图:

首先允许排序:AllowSorting="True";开启gridview的排序事件onsorting="GridView1_Sorting",也可以双击sorting事件;其次是设置nrowdatabound="GridView1_RowDataBound",也可以双击GridView1_RowDataBound

关联排序表达式SortExpression="字段名称"

代码明细:

前台代码:

View Code
< 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 " Width = " 800px "
AllowSorting
= " True "
onrowdatabound
= " GridView1_RowDataBound " onsorting = " GridView1_Sorting "
PageSize
= " 15 " >
< PagerSettings Mode = " NumericFirstLast " />
< RowStyle BackColor = " #EFF3FB " />
< Columns >
< asp:BoundField DataField = " CourseResID " HeaderText = " 课程ID " />
< asp:BoundField DataField = " CourseName " HeaderText = " 课程名 " SortExpression = " CourseName " >
< ItemStyle Width = " 100px " />
</ asp:BoundField >
< asp:BoundField DataField = " upTime " HeaderText = " 更新时间 "
DataFormatString
= " {0:yyyy-MM-dd} " SortExpression = " upTime " >
< ItemStyle Width = " 160px " HorizontalAlign = " Right " />
</ asp:BoundField >
< asp:BoundField DataField = " UserName " HeaderText = " 用户名 " SortExpression = " UserName " >
< ItemStyle Width = " 80px " ForeColor = " #33CC33 " />
</ asp:BoundField >
</ Columns >
< FooterStyle BackColor = " #507CD1 " Font - Bold = " True " ForeColor = " White " />
< PagerStyle BackColor = " #2461BF " ForeColor = " White " HorizontalAlign = " Right " />
< 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 >

数据读取

View Code
/// <summary>
/// 获取绑定数据
/// </summary>
/// <param name="orderFields"> 排序信息 </param>
/// <returns> 返回表 </returns>
public DataTable GetContents( string orderFields)
{
string cmdTxt = " Select top 30 * From CourseRes " ;
// 判断排序字段是否为空,如果不为空则将排序信息加在Sql语句后面
if ( ! string .IsNullOrEmpty(orderFields))
{
cmdTxt
+= " Order By " + orderFields;
}
SqlConnection conn
= new SqlConnection( @" Data Source=HAPPY-WITBANK;Initial Catalog=le2011;Persist Security Info=True;User ID=sa;Password=happy " );
SqlCommand comm
= new SqlCommand(cmdTxt, conn);
SqlDataAdapter adap
= new SqlDataAdapter(comm);
DataTable dt
= new DataTable();
adap.Fill(dt);

return dt;
}

排序信息代码,可以通用;注,要用时只需将上面的绑定Sql数据修改即可

View Code
public partial class 自定义分页 : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
if ( ! Page.IsPostBack)
{
DataLoad();
}
}
/// <summary>
/// 数据加载
/// </summary>
private void DataLoad()
{
string sortedField = "" ;
// 获取排序字段的信息
if (ViewState[ " SortedField " ] != null )
{
// 如果存在排序信息,则将排序信息转换为字典存储
Dictionary < string , string > sorted = (Dictionary < string , string > )ViewState[ " SortedField " ];
// 便利取值
foreach (KeyValuePair < string , string > kvp in sorted)
{
// key排序字段,value排序信息
sortedField = kvp.Key + " " + kvp.Value;
}
}

// 数据绑定
this .GridView1.DataSource = GetContents(sortedField);
this .GridView1.DataBind();
}

protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e)
{
#region // 加排序的头方法
// 判断是否是表头
if (e.Row.RowType == DataControlRowType.Header)
{
// 判断是否进行排序
if (ViewState[ " SortedField " ] != null )
{
// 恢复排序信息
Dictionary < string , string > order = (Dictionary < string , string > )ViewState[ " SortedField " ];
// 循环表头的单元格,判断是否有需要排序的单元格
for ( int i = 0 ; i < e.Row.Cells.Count; i ++ )
{
if (e.Row.Cells[i].Controls.Count > 0 )
{
// 是否是排序字段信息
LinkButton lb = e.Row.Cells[i].Controls[ 0 ] as LinkButton;
if (lb != null )
{
// 反序和降序
if (order.ContainsKey(lb.CommandArgument))
{
Literal li
= new Literal();
if (order[lb.CommandArgument] == " ASC " )
{
li.Text
= " " ;
}
else
{
li.Text
= " " ;
}
//
e.Row.Cells[i].Controls.Add(li);
}
}
}
}
}
}
#endregion 完成排序

}

protected void GridView1_Sorting( object sender, GridViewSortEventArgs e)
{
//
Dictionary < string , string > sorted = new Dictionary < string , string > ();
// 从ViewState读取上一次的排序信息。
if (ViewState[ " SortedField " ] == null )
{
// 如果没有排序信息,则将当前点击的对象(即点击的排序字段)和排序信息添加到字典中
sorted.Add(e.SortExpression, " ASC " );
// 将排序信息放在字典中保存
ViewState[ " SortedField " ] = sorted;
}
else
{
// 判断是否点击相同的排序,如果是相同的排序,
// 就是用反序
// 如果不是想通的排序,那就新的派讯,是用升序
sorted = (Dictionary < string , string > )ViewState[ " SortedField " ];
if (sorted.ContainsKey(e.SortExpression))
{
if (sorted[e.SortExpression] == " ASC " )
{
sorted[e.SortExpression]
= " DESC " ;
}
else
{
sorted[e.SortExpression]
= " ASC " ;
}
}
else
{
sorted.Clear();
sorted.Add(e.SortExpression,
" ASC " );
ViewState[
" SortedField " ] = sorted;
}
}

// 重新加载数据
DataLoad();

}
}

转载于:https://www.cnblogs.com/happygx/archive/2011/04/12/2013417.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值