zoukankan      html  css  js  c++  java
  • 扩展GridView之个性分页(转载)

    整天面对GridView的分页,早就厌烦了,下面就谈下如何给GridView扩展出个性的分页来,首先看看运行效果图:


    下面谈下重要的实现的思路的实现代码:
    实现思路和上文的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)
    {
    this.EnableViewState = true;

    lblCurrentPage = new Label();
    lblCurrentPage.ForeColor = ColorTranslator.FromHtml("#e78a29");
    lblCurrentPage.Text = "1";

    lblPageCount = new Label();
    lblPageCount.Text = "1";


    lblRowsCount = new Label();
    lblRowsCount.ForeColor = ColorTranslator.FromHtml("#e78a29");

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

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

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

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

    base.OnInit(e);
    }

    然后是关键部分的代码,就是将这些控件如何添加到GridView中,通过在创建子控件的方式,如下:
    在创建子控件的方法中添加分页控件
    protected override int CreateChildControls(System.Collections.IEnumerable dataSource, bool dataBinding)
    {
    int res = base.CreateChildControls(dataSource, dataBinding);
    if (ShowToolBar)
    {
    try
    {
    GridViewRow row = new GridViewRow(0, 0, DataControlRowType.Pager, DataControlRowState.Normal);
    TableCell c = new TableCell();
    c.Width = Unit.Percentage(100);
    c.ColumnSpan = this.Columns.Count;
    row.Cells.Add(c);
    TableCell cell1 = new TableCell();
    Table table = new Table();
    TableRow r = new TableRow();
    table.Rows.Add(r);
    table.Width = Unit.Percentage(100);
    c.Controls.Add(table);
    r.Cells.Add(cell1);
    Literal l1 = new Literal();
    l1.Text = "页次:";
    cell1.Controls.Add(l1);
    cell1.Wrap = false;
    cell1.Controls.Add(lblCurrentPage);
    l1 = new Literal();
    l1.Text = "页/";
    cell1.Controls.Add(l1);
    cell1.Controls.Add(lblPageCount);
    l1 = new Literal();
    l1.Text = "页,共";
    cell1.Controls.Add(l1);
    cell1.Controls.Add(lblRowsCount);
    l1 = new Literal();
    l1.Text = "条记录";
    cell1.HorizontalAlign = HorizontalAlign.Left;
    cell1.Controls.Add(l1);
    TableCell cell2 = new TableCell();
    cell2.HorizontalAlign = HorizontalAlign.Right;
    cell2.Wrap = false;


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

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

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

    l1 = new Literal();
    l1.Text = " [";
    cell2.Controls.Add(l1);
    cell2.Controls.Add(btnLast);
    l1 = new Literal();
    l1.Text = "] ";
    cell2.Controls.Add(l1);
    r.Cells.Add(cell2);
    this.Controls[0].Controls.AddAt(0, row);
    }
    catch
    {
    }
    }
    return res;
    }下面就是处理分页的事件,类似于RowCommand
    public void NavigateToPage(object sender, CommandEventArgs e)
    {
    btnFirst.Enabled = true;
    btnPrev.Enabled = true;
    btnNext.Enabled = true;
    btnLast.Enabled = true;
    switch (e.CommandArgument.ToString())
    {
    case "Prev":
    if (this.PageIndex > 0)
    {
    this.PageIndex -= 1;

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

    }
    break;
    case "First":
    this.PageIndex = 0;
    break;
    case "Last":
    this.PageIndex = this.PageCount - 1;
    break;
    }
    if (this.PageIndex == 0)
    {
    btnFirst.Enabled = false;
    btnPrev.Enabled = false;
    if (this.PageCount == 1)
    {
    btnLast.Enabled = false;
    btnNext.Enabled = false;
    }
    }
    else if (this.PageIndex == this.PageCount - 1)
    {
    btnLast.Enabled = false;
    btnNext.Enabled = false;
    }
    OnBind();
    }

  • 相关阅读:
    js正则
    【zookeeper】zookeeper 集群搭建
    【zookeeper】linux zookeeper的安装步骤
    【ActiveMQ】ActiveMQ之JDBC消息存储安装配置
    【数据库】Cannot create PoolableConnectionFactory (null, message from server: "Host 'xxxxx' isnot allow
    【ActiveMQ】Failed to bind to server socket: nio://0.0.0.0:61616 due to: java.net.BindException:
    【微服务】Springboot和ActiveMQ整合出现 Could not resolve placeholder 'xxx' in value "${xxx}"
    【ActiveMQ】记录一次activemq与jdk版本冲突问题
    【ActiveMq】linux ActiveMq安装
    【springcloud】Could not resolve type alias 'Dept'. Cause: java.lang.ClassNotFoundException
  • 原文地址:https://www.cnblogs.com/juan/p/1448960.html
Copyright © 2011-2022 走看看