网站首页 > 网络编程教程 > ASP.NET教程 > 手把手教你如何扩展GridView之个性分页

手把手教你如何扩展GridView之个性分页

  • 作者:互联网
  • 时间:2009-07-01 16:44:37

    实现思路和上文的Excel和Word导出是一样的,就是在GridView中添加行,首先声明以下控件,用于显示页次:第几页,共多少页,多少记录,首页,上一页,下一页,尾页
用于分页的控件
  Label lblCurrentPage;
        Label lblPageCount;
        Label lblRowsCount;
        LinkButton btnFirst;
        LinkButton btnPrev;
        LinkButton btnNext;
        LinkButton btnLast;在GridView的OnInit方法中,初始化这些控件
在控件的Oninit方法初始化分页控件
 protected override void OnInit(EventArgs e)
        {
            th***EnableViewState = true;         

            lblCurrentPage = new Label();
            lb***rrentPage.ForeColor = Co***Translator.FromHtml("#e78a29");
            lb***rrentPage.Text = "1";

            lblPageCount = new Label();
            lb***geCount.Text = "1";


            lblRowsCount = new Label();
            lb***wsCount.ForeColor = Co***Translator.FromHtml("#e78a29");

            btnFirst = new LinkButton();
            bt***rst.Text = "首页";
            bt***rst.Command += new CommandEventHandler(NavigateToPage);
            bt***rst.CommandName = "Pager";
            bt***rst.CommandArgument = "First";

            btnPrev = new LinkButton();
            bt***ev.Text = "上一页";
            bt***ev.Command += new CommandEventHandler(NavigateToPage);
            bt***ev.CommandName = "Pager";
            bt***ev.CommandArgument = "Prev";

            btnNext = new LinkButton();
            bt***xt.Text = "下一页";
            bt***xt.Command += new CommandEventHandler(NavigateToPage);
            bt***xt.CommandName = "Pager";
            bt***xt.CommandArgument = "Next";

            btnLast = new LinkButton();
            bt***st.Text = "尾页";
            bt***st.Command += new CommandEventHandler(NavigateToPage);
            bt***st.CommandName = "Pager";
            bt***st.CommandArgument = "Last";

            ba***OnInit(e);
        }

然后是关键部分的代码,就是将这些控件如何添加到GridView中,通过在创建子控件的方式,如下:
在创建子控件的方法中添加分页控件
   protected override int CreateChildControls(Sy***m.Collections.IEnumerable dataSource, bool dataBinding)
        {
            int res = ba***CreateChildControls(dataSource, dataBinding);
            if (ShowToolBar)
            {
                try
                {
                    GridViewRow row = new GridViewRow(0, 0, Da***ontrolRowType.Pager, Da***ontrolRowState.Normal);
                    TableCell c = new TableCell();
                    c.Width = Un***Percentage(100);
                    c.***umnSpan = th***Columns.Count;                 
                    ro***ells.Add(c);
                    TableCell cell1 = new TableCell();
                    Table table = new Table();
                    TableRow r = new TableRow();
                    ta***.Rows.Add(r);
                    ta***.Width = Un***Percentage(100);
                    c.***trols.Add(table);
                    r.***ls.Add(cell1);
                    Literal l1 = new Literal();
                    l1.Text = "页次:";
                    ce***.Controls.Add(l1);
                    ce***.Wrap = false;
                    ce***.Controls.Add(lblCurrentPage);
                    l1 = new Literal();
                    l1.Text = "页/";
                    ce***.Controls.Add(l1);
                    ce***.Controls.Add(lblPageCount);
                    l1 = new Literal();
                    l1.Text = "页,共";
                    ce***.Controls.Add(l1);
                    ce***.Controls.Add(lblRowsCount);
                    l1 = new Literal();
                    l1.Text = "条记录";
                    ce***.HorizontalAlign = Ho***ontalAlign.Left;
                    ce***.Controls.Add(l1);
                    TableCell cell2 = new TableCell();
                    ce***.HorizontalAlign = Ho***ontalAlign.Right;
                    ce***.Wrap = false;        


                    l1 = new Literal();
                    l1.Text = " [";
                    ce***.Controls.Add(l1);
                    ce***.Controls.Add(btnFirst);
                    l1 = new Literal();
                    l1.Text = "] ";
                    ce***.Controls.Add(l1);

                    l1 = new Literal();
                    l1.Text = " [";
                    ce***.Controls.Add(l1);
                    ce***.Controls.Add(btnPrev);
                    l1 = new Literal();
                    l1.Text = "] ";
                    ce***.Controls.Add(l1);

                    l1 = new Literal();
                    l1.Text = " [";
                    ce***.Controls.Add(l1);
                    ce***.Controls.Add(btnNext);
                    l1 = new Literal();
                    l1.Text = "] ";
                    ce***.Controls.Add(l1);

                    l1 = new Literal();
                    l1.Text = " [";
                    ce***.Controls.Add(l1);
                    ce***.Controls.Add(btnLast);
                    l1 = new Literal();
                    l1.Text = "] ";
                    ce***.Controls.Add(l1);
                    r.***ls.Add(cell2);
                    th***Controls[0].C***rols.AddAt(0, row);
                }
                catch
                {
                }
            }
            return res;
        }下面就是处理分页的事件,类似于RowCommand
 public void NavigateToPage(object sender, CommandEventArgs e)
        {
            bt***rst.Enabled = true;
            bt***ev.Enabled = true;
            bt***xt.Enabled = true;
            bt***st.Enabled = true;
            switch (e.***mandArgument.ToString())
            {
                case "Prev":
                    if (th***PageIndex > 0)
                    {
                        th***PageIndex -= 1;

                    }
                    break;
                case "Next":
                    if (th***PageIndex < (th***PageCount - 1))
                    {
                        th***PageIndex += 1;

                    }
                    break;
                case "First":
                    th***PageIndex = 0;
                    break;
                case "Last":
                    th***PageIndex = th***PageCount - 1;
                    break;
            }
            if (th***PageIndex == 0)
            {
                bt***rst.Enabled = false;
                bt***ev.Enabled = false;
                if (th***PageCount == 1)
                {
                    bt***st.Enabled = false;
                    bt***xt.Enabled = false;
                }
            }
            else if (th***PageIndex == th***PageCount - 1)
            {
                bt***st.Enabled = false;
                bt***xt.Enabled = false;
            }
            OnBind();
        }这样就轻而易举的实现了一个个性的分页,欢迎各位大虾拍砖。