2010-05-04 51 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; 
     } 
    } 
}