2010-05-04 55 views
0

我想做以下 我有一个动态表在我的ASP页 ,我想显示在多个页面的表,如谷歌结果 任何有用的建议,请 说明: 我不使用gridview 所以有其他方法?在ASP.net中的多个页面(如谷歌搜索结果)

+0

如果你不使用一个GridView,你有什么用?这些建议将取决于某个级别的实施细节。例如,[无论您使用什么]支持ObjectDataSource或SqlDataSource(两者均支持分页)。 – mwilson 2010-05-04 21:47:04

+0

我正在使用一个普通表格(Html),但它是一个动态我的意思是它根据结果增长,我会显示 – Hany 2010-05-04 21:56:45

回答

0

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

+0

不利的一面是他将不得不将所有结果发送到许多不适合他需要的浏览器。他应该着眼于使用带跳和跳过的LINQ。 – 2010-05-04 21:53:26

+0

对,可能会很慢,具体取决于表中的行数。 – derek 2010-05-04 21:54:39

0

它取决于将返回最多多少条记录。最有效的方法是

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

  3. 如果您正在使用LINQ to SQL中,使用取,如果你使用的是直接的SQL查询或存储的特效SKIP方法为http://blog.ofiryaron.com/blog/post/Pagination-on-Linq-to-SQL-childs-play!.aspx

  4. ,使ROWID的使用,以获取该网页的记录。

+0

我会把我的结果从一个正常的arraylist 在这个时候我只是把它们放到HTML表 我想使它在多页 – Hany 2010-05-04 22:24:52

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