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

  • 相关阅读:
    ZOJ 3818 Pretty Poem
    HDU 4597 Play Game
    HDU 4497 GCD and LCM
    CSU 1335 高桥和低桥
    UVA 10791 Minimum Sum LCM
    CSU 1119 Collecting Coins
    CSU 1120 病毒
    UVA 12169 Disgruntled Judge
    HDU 1301 Jungle Roads
    POJ 1258 Agri-Net
  • 原文地址:https://www.cnblogs.com/juan/p/1448960.html
Copyright © 2011-2022 走看看