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();
    }

  • 相关阅读:
    C# 实现 Snowflake算法生成唯一性Id
    kafka可视化客户端工具(Kafka Tool)的基本使用(转)
    docker 安装kafka
    Model类代码生成器
    使用docker 部署rabbitmq 镜像
    Vue 增删改查 demo
    git 提交代码到库
    Android ble蓝牙问题
    mac 配置 ssh 到git (Could not resolve hostname github.com, Failed to connect to github.com port 443 Operation timed out)
    okhttp
  • 原文地址:https://www.cnblogs.com/juan/p/1448960.html
Copyright © 2011-2022 走看看