首页 新闻 会员 周边

ascx用户控件

0
悬赏园豆:100 [已关闭问题] 关闭于 2010-02-02 11:48

我要在ascx中写一个分页!请问代码要怎么写啊?还有怎么用啊?

问题补充: 数据怎么传啊???
°潶、緤°的主页 °潶、緤° | 初学一级 | 园豆:17
提问于:2010-02-01 14:02
< >
分享
所有回答(5)
0

和在一個頁裏寫沒什麽分別. 寫好了拉進頁面就可以了 O__O'

DaCHun | 园豆:255 (菜鸟二级) | 2010-02-01 14:42
0

DataTable对象在普通ASPX页面,用户控件里实现分页???

可以在用户控件里采用GET传页码的方式,交给ASPX页面来做处理分页

Yuanet | 园豆:32 (初学一级) | 2010-02-01 15:11
0

N久前写过一个,可参考:

http://www.cnblogs.com/downmoon/archive/2007/12/28/1017856.html

现在都用吴旗娃的AspNetPager的控件来分页。
http://www.webdiyer.com/

邀月 | 园豆:25475 (高人七级) | 2010-02-01 16:34
0

分页其实说到底就是几个页码参数以及页面跳转的回调问题。参照 .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 那样的全权代理,同时负责把数据源分页读取,这个我功力有限。如果楼主是那个意思,我这里算是误导你了。

陛下 | 园豆:3938 (老鸟四级) | 2010-02-01 21:55
0

于在page中写数据上传一样

persialee | 园豆:3217 (老鸟四级) | 2010-02-02 11:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册