GridView排序、分页

还是先看一下效果吧。

怎么样,是不是很酷?

下面一步说明如何实现:

写一个自定义控件,继承自System.Web.UI.WebControl.GridView,然后对其进行扩展。

分页的实现:

重写OnRowCreate方法,对PagerRow进行特殊处理,清空里面的控件,加入自己的控件。首页,尾页,上一页,下一页的做法是,往PagerRow中添加四个LinkButton,CommandName设成"Page",CommandArgument分别设成"First","Last","Prev","Next".相应的Text或者Image可直接使用PagerSettings属性中的数据。

直接跳转页和每页记录条数的实现相对麻烦一些。加入两个DropDownList控件,往里面填充数据,并在此类中处理它们的OnSelectedIndexChange事件,重置PageIndex和PageSize.

排序图标的实现:

同样在OnRowCreate方法中,对HeaderRow进行特殊处理,可根据SortExpression属性找到当前正在进行排序的列,根据SortDirection属性得到排序的顺序,根据这两个属性往特定的列添加特定的图标。

滚动条的实现:

重写RenderContents方法,改变原有的HTML流布局。如果不重写,原来的布局如下:

< Table > //-->GridView

< tr > //-->PagerRow,当PagerPosition设成Top或TopAndBottom的时候,这一行才会出现

</ tr >

< tr > //-->HeaderRow

</ tr >

< tr > //-->DataRow

</ tr >

............

< tr > //-->DataRow

</ tr >

< tr > //-->FooterRow

</ tr >

< tr > //-->PagerRow(Bottom||TopAndBottom时出现)

</ Table >

重写RenderContents的目的就是把整个GridView分隔成三(两)个Table,第一和第三个Table中放PagerRow部分,中间一个Table放在DIV中,固定DIV的高度,使其出现滚动条,对HeaderRow进行特殊处理,使其不会随滚动条的滚动而消失(方法是:style="top:expression(this.parentNode.parentNode.scrollTop);").然后再用一个Table把这三个Table包起来。重写后布局如下:

< Table >

< tr >

< td >

< Table > PagerRow </ Table >

</ td >

< tr >

< tr >

< td >

< DIV >

< Table > DataRow&&FooterRow </ Table >

</ DIV >

</ td >

</ tr >

< tr >

< td >

< Table > PagerRow </ Table >

</ td >

</ tr >

</ Table >



接下来说一下具体实现:

1、新建一个Web Control Library类型的工程,命名为myControls,添加一个类myGridView.cs:代码如下:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Collections;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.ComponentModel;

namespace CRM2006.GridView
... {
/**////<summary>
///SummarydescriptionformyGridView
///</summary>
///

publicclassCrmGV:System.Web.UI.WebControls.GridView
...{
//privateUnit_divheight;
//privateint_offset;
privateboolisPagerCreated=false;
publicCrmGV()
...{
}

[
Description(
"是否启用自定义分页功能"),
Category(
"分页"),DefaultValue("false"),Themeable(true)
]
publicboolAllowCustomerPagerSettings
...{
get
...{
objecto=ViewState["AllowCustomerPagerSettings"];
return(o!=null?(bool)o:false);
}

set
...{
ViewState[
"AllowCustomerPagerSettings"]=value;
}

}

[Localizable(
true),DefaultValue("Currentpage:"),Themeable(true)]
publicstringCurrentPageText
...{
get
...{
objecto=ViewState["CurrentPageText"];
return(o!=null?o.ToString():"Currentpage:");
}

set
...{
ViewState[
"CurrentPageText"]=value;
}

}

[Localizable(
true),DefaultValue("Jumptopage"),Themeable(true)]
publicstringJumpToPageText
...{
get
...{
objecto=ViewState["JumpToPageText"];
return(o!=null?o.ToString():"Jumptopage");
}

set
...{
ViewState[
"JumpToPageText"]=value;
}

}

[Localizable(
true),DefaultValue("Display{0}recordsperpage"),Themeable(true)]
publicstringRecordCountPerPage
...{
get
...{
objecto=ViewState["RecordCountPerPage"];
return(o!=null?o.ToString():"Display{0}recordsperpage");
}

set
...{
ViewState[
"RecordCountPerPage"]=value;
}

}

[Description(
"TheheightofDIVelement"),Themeable(true)]
publicvirtualUnitDIVHeight
...{
get
...{
objecto=ViewState["DIVHeight"];
returnnewUnit(o.ToString());
}

set
...{
ViewState[
"DIVHeight"]=value;
}

}

[Description(
"ImageUrlforsortascending"),Themeable(true),Editor("System.Web.UI.Design.UrlEditor",typeof(System.Drawing.Design.UITypeEditor))]//Editro特性:指定用以改变属性的编辑器
publicstringSortAscImageUrl
...{
get
...{
objecto=ViewState["SortImageAsc"];
return(o!=null?o.ToString():"");
}

set
...{
ViewState[
"SortImageAsc"]=value;
}

}

[Description(
"ImageUrlforsortdescending"),Themeable(true),Editor("System.Web.UI.Design.UrlEditor",typeof(System.Drawing.Design.UITypeEditor))]//Editro特性:指定用以改变属性的编辑器
publicstringSortDescImageUrl
...{
get
...{
objecto=ViewState["SortImageDesc"];
return(o!=null?o.ToString():"");
}

set
...{
ViewState[
"SortImageDesc"]=value;
}

}

[Description(
"OffSetValueofHeadRow"),DefaultValue(4),Themeable(true)]
publicintOffSet
...{
get
...{
objecto=ViewState["OffSet"];
returnConvert.ToUInt16(o);
}

set
...{
if(value<=1)
ViewState[
"OffSet"]=1;
else
ViewState[
"OffSet"]=value;
}

}

protectedoverridevoidOnRowCreated(GridViewRowEventArgse)
...{
if(e.Row.RowType==DataControlRowType.Pager)
...{
if(AllowCustomerPagerSe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值