ASP.net中的多个页面(如谷歌搜索结果)

时间:2010-05-04 21:41:31

标签: asp.net pagination

我正在尝试执行以下操作 我的asp页面中有一个动态表 我希望在google结果等多个页面中显示该表格 请给我任何有用的建议 注意: 我不使用gridview 所以任何其他方式??

3 个答案:

答案 0 :(得分:1)

如果您希望输出比GridView提供更多的灵活性,请查看Repeater。

由于Repeater不直接实现分页,因此您必须提供自己的Next和Previous按钮。正如Sundararajan S所述,如果您有许多记录,您将需要使用当前页码和页面大小仅将当前页面的记录返回到浏览器而不是全部。

下面是一个例子(我不知道你的数据源是什么样的,所以我只是用一个列表作为例子。用更合适的东西代替。)

希望有所帮助。

Default.aspx的:

    <asp:Button ID="PrevPageButton" runat="server" Text="Prev" 
        onclick="PrevPageButton_Click" />
    <asp:Label ID="CurrentPageLabel" runat="server" />
    <asp:Button ID="NextPageButton" runat="server" Text="Next" 
        onclick="NextPageButton_Click" />


    <asp:Repeater ID="Repeater1" runat="server">
        <ItemTemplate>
            <h2> <%# Eval("Name") %> </h2>
            <p>
            <%# Eval("Description") %>
            </p>
        </ItemTemplate>
    </asp:Repeater>

Default.aspx.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace RepeaterPaging
{
    public partial class _Default : System.Web.UI.Page
    {
        private const int PageSize = 10;
        private const int MaxPage = 4;


        public int CurrPage
        {
            get
            {
                if (this.ViewState["CurrPage"] == null )
                    this.ViewState["CurrPage"] = 0;

                return (int) this.ViewState["CurrPage"];
            }

            set { this.ViewState["CurrPage"] = value; }
        }

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

        }

        protected void BindItems()
        {
            int currPage = CurrPage;

            List<Book> books = new List<Book>();
            int startItem = (currPage * PageSize) + 1;
            for (int i = startItem; i < startItem+PageSize; i++)
            {
                books.Add(new Book("Title " + i, "Description " + i + " ..................."));
            }

            Repeater1.DataSource = books;
            Repeater1.DataBind();

            CurrentPageLabel.Text =
                string.Format(" Page {0} of {1} ", CurrPage + 1, MaxPage + 1);
        }

        protected void NextPageButton_Click(object sender, EventArgs e)
        {
            if (CurrPage < MaxPage)
            {
                CurrPage++;
                BindItems();
            }
        }

        protected void PrevPageButton_Click(object sender, EventArgs e)
        {
            if (CurrPage > 0)
            {
                CurrPage--;
                BindItems();
            }
        }
    }

    public class Book
    {
        public string Name { get; set; }
        public string Description { get; set; }

        public Book(string name, string desc)
        {
            Name = name;
            Description = desc;
        }
    }
}

答案 1 :(得分:0)

您可以使用jquery tablesorter插件和jquery.tablesorter.pager插件来完成此操作。它可以在标准的html表上运行,并且有很多选项,例如备用行高亮,排序等。

答案 2 :(得分:0)

这取决于最多返回的记录数。最有效的方法是

  1. 将分页编号实现为查询参数不同的链接。
  2. 根据查询参数,在服务器端,单独获取与该页面对应的记录。例如。如果您的页面大小为10且当前页面为2,则仅从服务器获取11,20条记录并将其绑定到html表。

  3. 如果您使用的是LINQ to SQL,请使用“{3}}

  4. 中的Take和SKIP方法”
  5. 如果您使用的是直接SQL查询或存储过程,请使用RowID来获取该页面记录。