我要在ascx中写一个分页!请问代码要怎么写啊?还有怎么用啊?
和在一個頁裏寫沒什麽分別. 寫好了拉進頁面就可以了 O__O'
DataTable对象在普通ASPX页面,用户控件里实现分页???
可以在用户控件里采用GET传页码的方式,交给ASPX页面来做处理分页
N久前写过一个,可参考:
http://www.cnblogs.com/downmoon/archive/2007/12/28/1017856.html
现在都用吴旗娃的AspNetPager的控件来分页。
http://www.webdiyer.com/
分页其实说到底就是几个页码参数以及页面跳转的回调问题。参照 .net 3.5 中的 Pager 控件,你大概就知道分页需要数据源,也就是类似这样一个接口 ICollection,以使得其获取条目总数(TotalCount <- ICollection.Count),另外需要一个单页条数参数(CountPerPage),最后便是回调了 event EventHandler<PageEventArgs> PageChanged,其中
public PageEventArgs: EventArgs{
public int CurrentPageIndex{get;set;}
}
---------------------------------------------------------------
你的自定义控件该是这样:
html代码:
<@.....>
<asp:Panel runat="server" id="pnlPages"/>
后台代码:
using ....
public partial class MyPageControl: Control{
void page_load(){
RenderPages();
}
void RenderPages(){//页码的绘制可根据个人喜好。我喜欢那种显示最前几页、最后几页以及最近几页的方式。
int pages = DataSource.Count / CountPerPage;
int c = CurrentPageIndex < ShowPagesHalfCount ? CurrentPageIndex: ShowPagesHalfCount ;
int i = 0;
for(;i < c;i++){//当前页的前半部分
this.pnlPages.append(CreatePageControl(i));
}
if(i < CurrentPageIndex){//省略号
this.pnlPages.Append(CreatePageDotControl());
}
this.pnlPages.Append(CreateCurrentPageControl(i));//当前页
if(...){//省略号
....
}
for(...){//后几页
.....
}
}
public ICollection DataSource{get;set;}//使用control_viewstate保存?
public int CountPerPage{get;set;}//使用control_viewstate保存?
public int CurrentPageIndex{get;set;}//使用control_viewstate保存?
public int ShowPagesHalfCount{get;set;}//The same question as above!
public bool UseLinkOrButton{get;set;}//The same question as above!
EventHandler<PageEventArgs> PageChanged;
void CreatePageControl(int pageIndex){
Control c;
if(UseLinkOrButton){
c = new Link();
}
else{
c = new Button();
}
c.Text = pageIndex;
c.Clicked += new EventArgs(InternalPageChanged);
return c;
}
void CreateCurrentPageControl(int pageIndex){
Control c = new Literal();
c.Text = pageIndex;
return c;
}
void CreatePageDotControl(){
Control c = new Literal();
c.Text = "...";
return c;
}
void InternalPageChanged(Object sender, EventArgs args){
if(PageChanged != null){
Control c = sender as Control;
PageChanged(sender, new PageEventArgs(){ CurrentPageIndex = int.Parse(c.Text) });
}
}
}
==============================
徒手写代码,虽然很潦草,好在思想都在。我确实写过 pager,有 javascript 版本的,也有“类似”你这样 ascx 版本的(在 mvc 项目中的 view 分页),总之,应该不是很难,只要你理解页面、控件的生命周期,以及做好事件的调度。
=============================
另外传参也可以使用 QueryString,这个微软的 Pager 是支持的,只是我没用过。我的理解,是把这里的回调去除,改为生成 HypeLink,然后约定跳转地址,比如 ?pageIndex={0},由当前页面负责读取该 QueryString 并在数据源实际分页。
==============================
貌似我这里说的分页只是显示分页,不是微软 Pager 那样的全权代理,同时负责把数据源分页读取,这个我功力有限。如果楼主是那个意思,我这里算是误导你了。
于在page中写数据上传一样