asp.net 常见操作----分页(1)

朋友做的一个网站用aspnetpager控件进行分页放到虚拟空间出现问题,看来用分页控件是不行了,但他近期忙于在公司实习,于是让我帮他写个自定义分页。

经过上网查阅相关资料结合自己之前的知识积累,顺利实现了GridViewRepeater自定义分页功能,GridView分页截图如下:

 

贴上主要实现代码:

 

1GridView自定义分页前台核心代码:

GridView.aspx

...

view source

print?

<PagerTemplate>

                <br />

 

                <asp:Label ID="lblPage" runat="server" Text='<%# "" + ((GridView)Container.NamingContainer).PageCount + ",当前第" + (((GridView)Container.NamingContainer).PageIndex + 1) + "" %>'></asp:Label>

                <asp:LinkButton ID="lbtnFirst" runat="server" Text="首页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'

 

                    CommandName="Page" CommandArgument="First"></asp:LinkButton>

                <asp:LinkButton ID="lbtnPrev" runat="server" Text="上一页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != 0 %>'

 

                    CommandName="Page" CommandArgument="Prev"></asp:LinkButton>

                <asp:PlaceHolder ID="numeric" runat="server"></asp:PlaceHolder>

 

                <asp:LinkButton ID="lbtnNext" runat="server" Text="下一页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != (((GridView)Container.NamingContainer).PageCount - 1) %>'

                    CommandName="Page" CommandArgument="Next"></asp:LinkButton>

 

                <asp:LinkButton ID="lbtnLast" runat="server" Text="尾页" Enabled='<%# ((GridView)Container.NamingContainer).PageIndex != (((GridView)Container.NamingContainer).PageCount - 1) %>'

                    CommandName="Page" CommandArgument="Last"></asp:LinkButton>

 

                <asp:DropDownList ID="ddlJumpPage" runat="server">

                </asp:DropDownList>

 

                <asp:ImageButton ID="btnGo" runat="server" Width="30px" Height="20px" ImageAlign="Bottom" ImageUrl="~/images/go.jpg" CommandName="Go" />

            </PagerTemplate>

 

  

2GridView自定义分页后台核心代码:

GridView.aspx.cs

view source

print?

//根据命令来变更当前页码

    protected void gvTest_RowCommand(object sender, GridViewCommandEventArgs e)

 

    {

        if (e.CommandName == "Page")

 

        {

            switch (e.CommandArgument.ToString())

 

            {

                case "First":

 

                    gvTest.PageIndex = 0;

                    break;

 

                case "Prev":

                    if (gvTest.PageIndex > 0)

 

                    {

                        gvTest.PageIndex -= 1;

 

                    }

                    break;

 

                case "Next":

                    if (gvTest.PageIndex < (gvTest.PageCount - 1))

 

                    {

                        gvTest.PageIndex += 1;

 

                    }

                    break;

 

                case "Last":

                    gvTest.PageIndex = gvTest.PageCount - 1;

 

                    break;

                default:

 

                    gvTest.PageIndex = Int32.Parse(e.CommandArgument.ToString()) - 1;

                    break;

 

            }

        }

 

        else

        {

 

            if (e.CommandName == "Go")

            {

 

                DropDownList ddlJumpPage = (DropDownList)gvTest.BottomPagerRow.FindControl("ddlJumpPage");

                int index = Int32.Parse(ddlJumpPage.SelectedValue);

 

                gvTest.PageIndex = index - 1;

                GetData();

 

            }

        }

 

    }

 

 

    //显示页码导航

    protected void gvTest_RowCreated(object sender, GridViewRowEventArgs e)

 

    {

        if (e.Row.RowType == DataControlRowType.Pager)

 

        {

            PlaceHolder ph = (PlaceHolder)e.Row.FindControl("numeric");

 

            int startIndex = (gvTest.PageIndex) / 10 * 10 + 1;//根据当前页得到第一个页码

            int endIndex = startIndex + 9;//显示10个页码

 

            if (endIndex > gvTest.PageCount)//判断是否为最后一页

            {

 

                endIndex = gvTest.PageCount;

            }

 

            for (int i = startIndex; i <= endIndex; i++)//通过循环动态显示页码

            {

 

                var lbtn = new LinkButton { CommandName = "Page", CommandArgument = i.ToString(), Text = "[" + i + "]" };

                ph.Controls.Add(i - 1 != gvTest.PageIndex ? (Control)lbtn : new LiteralControl(i.ToString()));

 

                ph.Controls.Add(new LiteralControl(" "));

            }

 

        }

    }

 

  

3Repeater自定义分页前台核心代码

Repeater.aspx

...

view source

print?

<asp:Repeater ID="rpTest" runat="server" OnItemDataBound="rpTest_ItemDataBound" OnItemCreated="rpTest_ItemCreated">

 

 

...

 

 

<FooterTemplate>

                <tr>

 

                    <td colspan="6">

                        <br />

 

                        <asp:Label ID="lblPageCount" runat="server" Text=""></asp:Label>,当前第<asp:Label

                            ID="lblCurrentPage" runat="server" Text=""></asp:Label>

 

                        <asp:HyperLink ID="hlFirst" runat="server" Text="首页"></asp:HyperLink>

                        <asp:HyperLink ID="hlPrev" runat="server" Text="上一页"></asp:HyperLink>

 

                        <asp:PlaceHolder ID="numeric" runat="server"></asp:PlaceHolder>

                        <asp:HyperLink ID="hlNext" runat="server" Text="下一页"></asp:HyperLink>

 

                        <asp:HyperLink ID="hlLast" runat="server" Text="尾页"></asp:HyperLink>

                        <asp:DropDownList ID="ddlJumpPage" runat="server">

 

                        </asp:DropDownList>

                        <asp:ImageButton ID="ibtnGo" runat="server" Width="30px" Height="20px" ImageAlign="Bottom"

 

                            ImageUrl="~/images/go.jpg" OnClick="ibtnGo_Click" />

                    </td>

 

                </tr>

                </table>

 

            </FooterTemplate>

</asp:Repeater>

 

<asp:Label ID="lblMessage" runat="server"></asp:Label>

 

4Repeater自定义分页后台核心代码

Repeater.aspx.cs

view source

print?

//返回待绑定的数据源

    private PagedDataSource GetPds()

 

    {

        StudentInfo stuInfo = new StudentInfo();

 

        DataSet ds = stuInfo.GetStudent();

        PagedDataSource pds = new PagedDataSource();

 

        pds.DataSource = ds.Tables[0].DefaultView;//设置数据源

        pds.AllowPaging = true;//允许分页

 

        pds.PageSize = 10;//一页显示10条信息

        if (Request.QueryString["page"] != null)//判断页面传值是否为空

 

        {

            pds.CurrentPageIndex = Int32.Parse(Request.QueryString["page"].ToString()) - 1;

 

        }

        else

 

        {

            pds.CurrentPageIndex = 0;

 

        }

        return pds;

 

    }

 

 

  

 

 

//显示底部分页按钮并向下拉列表控件中填充数据

    protected void rpTest_ItemDataBound(object sender, RepeaterItemEventArgs e)

 

    {

        if (GetPds().DataSourceCount != 0)

 

        {

            if (e.Item.ItemType == ListItemType.Footer)//判断是否为页脚

 

            {

                Label lblRecordCount = (Label)e.Item.FindControl("lblRecordCount");

 

                Label lblPageCount = (Label)e.Item.FindControl("lblPageCount");

                Label lblCurrentPage = (Label)e.Item.FindControl("lblCurrentPage");

 

                HyperLink hlFirst = (HyperLink)e.Item.FindControl("hlFirst");

                HyperLink hlPrev = (HyperLink)e.Item.FindControl("hlPrev");

 

                HyperLink hlNext = (HyperLink)e.Item.FindControl("hlNext");

                HyperLink hlLast = (HyperLink)e.Item.FindControl("hlLast");

 

                DropDownList ddlJumpPage = (DropDownList)e.Item.FindControl("ddlJumpPage");

                int pageCount = GetPds().PageCount;

 

                int curPage = GetPds().CurrentPageIndex + 1;

                for (int i = 1; i <= pageCount; i++)

 

                {

                    ddlJumpPage.Items.Add(i.ToString());

 

                }

                if (pageCount == 1)//若总页数只有一页,则底部分页链接不可用

 

                {

                    hlFirst.Enabled = false;

 

                    hlPrev.Enabled = false;

                    hlNext.Enabled = false;

 

                    hlLast.Enabled = false;

                }

 

                else

                {

 

                    if (curPage <= 1)//若当前为首页,则首页和上一页的链接不可用

                    {

 

                        hlFirst.Enabled = false;

                        hlPrev.Enabled = false;

 

                        hlNext.Enabled = true;

                        hlLast.Enabled = true;

 

                    }

                    else

 

                    {

                        hlPrev.NavigateUrl = "?page=" + (curPage - 1);

 

                    }

                    if (curPage >= pageCount)//若当前页为最后一页,则下一页和尾页的链接不可用

 

                    {

                        hlFirst.Enabled = true;

 

                        hlPrev.Enabled = true;

                        hlNext.Enabled = false;

 

                        hlLast.Enabled = false;

                    }

 

                    else

                    {

 

                        hlNext.NavigateUrl = "?page=" + (curPage + 1);

                    }

 

                    hlFirst.NavigateUrl = "?page=1";

                    hlLast.NavigateUrl = "?page=" + pageCount;

 

                }

                lblPageCount.Text = pageCount.ToString();

 

                lblCurrentPage.Text = curPage.ToString();

            }

 

        }

        else//若数据源中无信息,则显示相关提示

 

        {

            rpTest.Visible = false;

 

            lblMessage.Text = "无相关记录";

        }

 

    }

 

 

  

 

 

//显示页码导航

    protected void rpTest_ItemCreated(object sender, RepeaterItemEventArgs e)

 

    {

        if (GetPds().DataSourceCount != 0)

 

        {

            if (e.Item.ItemType == ListItemType.Footer)

 

            {

                PlaceHolder ph = (PlaceHolder)e.Item.FindControl("numeric");

 

                int pageCount = GetPds().PageCount;

                int curPage = GetPds().CurrentPageIndex + 1;

 

                int startIndex = (curPage - 1) / 10 * 10 + 1;//根据当前页得到第一个页码

                int endIndex = startIndex + 9;//显示10个页码

 

                if (endIndex > pageCount)//判断是否为最后一页

                {

 

                    endIndex = pageCount;

                }

 

                for (int i = startIndex; i <= endIndex; i++)//通过循环动态显示页码

                {

 

                    var hl = new HyperLink { ID = "hl" + i, Text = "[" + i + "]", NavigateUrl = "?page=" + i };

                    ph.Controls.Add(i != curPage ? (Control)hl : new LiteralControl(i.ToString()));

 

                    ph.Controls.Add(new LiteralControl(" "));

                }

 

            }

        }

 

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值