分页(以汽车表为例)

【法一】2015.8.9

aspx界面:

<body>

<asp:Repeater ID="Repeater1" runat="server">

<div>

<HeaderTemplate>

<ul>

</HeaderTemplate>

<ItemTemplate>

<li><%#Eval("Name")%>(<%#("Price")%>)</li>

</ItemTemplate>

<FooterTemplate>

</ul>

</FooterTemplate>

</div>

后端代码:

private MyDBDataContext_Context=new MyDBDataContext();

private const int PAGESIZE=3;

public List<Car>GetPagedCar(int pageNO)

{

     var query=_Context.Car.Skip(PAGESIZE*(pageNO-1)).Take(PAGESIZE);

     return query.ToList();

}

public int GetPageCount()

{

    int rowsCount=_Context.Car.Count;//获得总行数

    int pageCount=(int)Math.Ceiling(1.0*(rowsCount/PAGESIZE));//计算总页数

    return pageCount;

}

protected void Page_Load(object sender,EventArgs e)

{

     int nowPage=1;//页数从1开始

     if(Request["pageno"]!=null)

    {

          nowPage=Convert.ToInt32(Request["pageno"]);

    }

     List<Car>list=GetPagedCar(nowPage);

     ---List<Car>list=GetPagedCar(1);显示第一页数据List<Car>list=GetPagedCar(2);显示第二页数据

     //给Repeater数据

     Repeater1.DataSourse=list;

     Repeater1.DataBind();   

    //给上一页、下一页数据---加入超链接HyperLink实现翻页功能

    int pageCount=GetPageCount();

   //控制下一页链接

    if(pageCount==nowPage)

   {

        linkNext.Enabled=false;

   }

    else

   {

       linkNext.Enabled=true;

       linkNext.NavigateUrl="Default.aspx?pageno="+(nowPage+1).ToString(); 

   }

   //控制上一页链接

    if(nowPage==1)

   {

       linkPrev.Enabled=false;

   }

    else

    {

        linkPrev.Enabled=true;

        linkPrev.NavigateUrl="Default.aspx?pageno="+(nowPage-1).ToString();---注意:pageno等号前后不能加空格

    }

       //控制首页链接

       linkFirst.NavigateUrl="Default.aspx?pageno=1"

       //控制尾页链接

       linkLast.NavigateUrl="Default.aspx?pageno="+pageCount;

}

      //跳转到某一页

protected btnGo_Click(object sender,EventArgs e)

{

       int goNo=Convert.ToInt32(txtPageNo.Text);

       if(goNo<1)

       {

              Response.Redirect("Default.aspx")

       }

        else if(goNo<GetPageCount())

        {

               Response.Redirect("Default.aspx?pageno="+GetPageCount());

        }

        else

        {

               Response.Redirect("Default.aspx?pageno="+goNo);

        }

}

【法二】2015.8.18

 part1---不加标注

aspx代码:

  <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater ID="Repeater1" runat="server">
            <HeaderTemplate><ul></HeaderTemplate>
            <FooterTemplate></ul></FooterTemplate>
            <ItemTemplate>
                <li><%# Eval("Name") %></li>
            </ItemTemplate>
        </asp:Repeater>
    </div>
        <a href="Default.aspx" runat="server" id="lnkPrev">
            <input id="Button1" type="button" value="上一页" /></a>
        <a href="Default.aspx" runat="server" id="lnkNext">
            <input id="Button2" type="button" value="下一页" /></a>
</form>
</body>

VS代码:

public partial class _Default : System.Web.UI.Page
{
    private MyDBDataContext _Context = new MyDBDataContext();
    private const int PAGESIZE = 3;
    private int _PageNo = 1;  //当前的页号
    //获取总页数
    public int GetPageCount()
    {
        //取总行数
        int rowsCount = _Context.Car.Count();
        //算出总页数
        int pageCount = (int)Math.Ceiling( 1.0*rowsCount / PAGESIZE);

        return pageCount;
    }
    public List<Car> GetPagedCar()
    {
        var query = _Context.Car.Skip(PAGESIZE*(_PageNo-1)).Take(PAGESIZE);
        return query.ToList();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Request["pn"] != null)
            {
                _PageNo = Convert.ToInt32(Request["pn"]);
            }
            Repeater1.DataSource = GetPagedCar();
            Repeater1.DataBind();

            if (_PageNo == 1)
            {
                lnkPrev.HRef = "Default.aspx?pn=1";
            }
            else
            {
                lnkPrev.HRef = "Default.aspx?pn=" + (_PageNo - 1).ToString();
            }
            if (_PageNo == GetPageCount())
            {
                lnkNext.HRef = "Default.aspx?pn=" + GetPageCount().ToString();
            }
            else
            {
                lnkNext.HRef = "Default.aspx?pn=" + (_PageNo + 1).ToString();
            }

        }
    }
}

part2---加标注

aspx代码:

<title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
     <asp:Repeater ID="Repeater1" runat="server">
            <HeaderTemplate><ul></HeaderTemplate>
            <FooterTemplate></ul></FooterTemplate>
            <ItemTemplate>
                <li><%# Eval("Name") %></li>
            </ItemTemplate>
        </asp:Repeater>
    </div>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上一页" />
        <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="下一页" />
        <asp:DropDownList ID="PageList" runat="server" AutoPostBack="True" OnSelectedIndexChanged="PageList_SelectedIndexChanged">
        </asp:DropDownList>
    &nbsp;一共<asp:Label ID="lblAll" runat="server" Font-Bold="True" ForeColor="Red"></asp:Label>
        页,当前是第<asp:Label ID="lblNow" runat="server" Font-Bold="True" ForeColor="Red"></asp:Label>
        页</form>
</body>

VS代码:

public partial class Default2 : System.Web.UI.Page
{
    private MyDBDataContext _Context = new MyDBDataContext();
    private const int PAGESIZE = 3;
    private int _PageNo = 1;  //当前的页号
    //获取总页数
    public int GetPageCount()
    {
        //取总行数
        int rowsCount = _Context.Car.Count();
        //算出总页数
        int pageCount = (int)Math.Ceiling(1.0 * rowsCount / PAGESIZE);

        return pageCount;
    }
    public List<Car> GetPagedCar()
    {
        _PageNo = Convert.ToInt32( PageList.SelectedValue);
        var query = _Context.Car.Skip(PAGESIZE * (_PageNo - 1)).Take(PAGESIZE);
        return query.ToList();
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            FillPageList();
            ShowCars();
        }
    }

    private void ShowCars()
    {
        Repeater1.DataSource = GetPagedCar();
        Repeater1.DataBind();

        //给当前页和一共几页赋值
        lblNow.Text = PageList.SelectedValue;
        lblAll.Text = PageList.Items.Count.ToString();
    }

    private void FillPageList()
    {
        PageList.Items.Clear();

        int pageCount = GetPageCount();
        for (int i = 1; i <= pageCount; i++)
        {
            ListItem li = new ListItem(i.ToString(), i.ToString());
            PageList.Items.Add(li);
        }
    }
    protected void PageList_SelectedIndexChanged(object sender, EventArgs e)
    {
        ShowCars();
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (PageList.SelectedIndex == 0)
        {
            return;
        }
        PageList.SelectedIndex--;
        ShowCars();
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        if (PageList.SelectedIndex == GetPageCount() - 1)
        {
            return;
        }

        PageList.SelectedIndex++;
        ShowCars();
    }
}

2015.9.9

汽车表信息分页

【Home控制器代码】---添加引用using MvcApplication1.Models;

namespace MvcApplication1.Controllers
{
    public class HomeController : Controller
    {
        private const int PAGESIZE = 5;

        public ActionResult Index(int? id)
        {
            if (id == null)
            {
                id = 1;
            }
            List<Car> list = new CarBF().Select(PAGESIZE,id.Value);//获取当前页数据(id代表当前页页号)
            int pageCount = new CarBF().GetPageCount(PAGESIZE);//获取总页数
            int nextPageNo = id.Value>pageCount?pageCount:id.Value + 1;//计算下一页页号
            int prevPageNo = id.Value==1?1:id.Value - 1;//计算上一页页号
            //使用ViewBag带到视图层去
            ViewBag.NextPageNo = nextPageNo;
            ViewBag.PrevPageNo = prevPageNo;
            ViewBag.PageCount = pageCount;//总页数
            ViewBag.PageNo = id;//当前页号
            //下拉列表分页---下拉列表按钮代码
            List<int> listPage = new List<int>();
            for (int i = 1; i <= pageCount; i++)
            {
                listPage.Add(i);
            }
            SelectList pageList = new SelectList(listPage,id);
            ViewBag.PageList = pageList;
            return View(list);
        }
    }
}

【CarBF代码】

namespace MvcApplication1.Models
{
    public class CarBF
    {
        private MyDBDataContext_Context=new MyDBDataContext();
        //获取总页数
        public int GetPageCount(int pageSize)
        {
            int rowsCount = _Context.Car.Count();
            int pageCount = (int)Math.Ceiling(1.0*(rowsCount/pageSize));
            return pageCount;
        }
        //获取指定页数据
        public List<Car> Select(int pageSize,int pageNo)
        {
            var query=_Context.Car.Skip(pageSize*(pageNo-1)).Take(pageSize);
            return query.ToList();
        }
    }
}

【Index视图源】

@using MvcApplication1.Models;
@model List<Car>
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width">
    <title>Index</title>
</head>
<body>
    <h1>分页</h1>
    <table border="0" width="100%" cellpadding="5" cellspacing="1" bgcolor="navy">
        <tr style="color:white;text-align:center;font-weight:bold">
           <td>代号</td>
           <td>车型</td>
           <td>系列</td>
           <td>厂商</td>
           <td>价格</td>
        </tr>
        @{
        foreach(Car data in Model)
        {
        <tr bgcolor="white">
            <td>@data.Code</td>
            <td>@data.Name</td>
            <td>@data.Brand1.Brand_Name</td>
            <td>@data.Brand1.Productor.Prod_Name</td>
            <td>@data.Price</td>
        </tr>
        }
        }
    </table>
    @{
        int nowPageNo = (int)ViewBag.PageNo;
        int nextPageNo = (int)ViewBag.PageNo + 1;
        if(nowPageNo==new CarBF().GetPageCount(5))
        {
            nextPageNo = nowPageNo;
        }
        int prevPageNo = (int)ViewBag.PageNo - 1;
        if(nowPageNo==1)
        {
            prevPageNo = 1;
        }
     }
    @Html.ActionLink("首页","Index","Home","new{id=1}")
    @Html.ActionLink("下一页","Index","Home","{id=(int)ViewBag.NextPageNo}",null)
    @Html.ActionLink("上一页","Index","Home","{id=(int)ViewBag.PrevPageNo}",null)
    @Html.ActionLink("尾页","Index","Home","new{id=(int)ViewBag.PageCount")
    &nbsp;&nbsp;
    <div style="display:inline-block">
    @using(Html.BeginForm("Index","Home"))
    {
    @:转第@Html.TextBox("id",null,new{size=2})页<input type="submit" value="GO"/>---加GO转页按钮
    }
    </div>    一共@ViewBag.PageCount页,当前是第@ViewBag.PageNo页---常见页数显示
</body>

【转页部分还可写成】

<div style="display:inline-block">
@using(Html.BeginForm("Index","Home"))
{
    @:转第@Html.DropDownList("id",(SelectList)ViewBag.PageList)页<input type="submit" value="GO"/>---加GO转页按钮
}
</div>  

或者

<div style="display:inline-block">
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new {id="form2"}))
{
    @:转第@Html.DropDownList("id",(SelectList)ViewBag.PageList,new{onchange="form2.submit()"})页<input type="submit" value="GO"/>---加GO转页按钮
}
</div>  

或者

<div style="display:inline-block">
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new {id="form2"}))
{
    @:转第@Html.DropDownList("id",(SelectList)ViewBag.PageList,new{})页<span onclick="form2.submit()"></span>
}
</div>  

原文地址:https://www.cnblogs.com/kxy3-1314/p/4739057.html