2009-03-16 43 views
14

Tôi đang tìm một điều khiển phân trang khá trong ASP.NET, giống như máy nhắn tin Stackoverflow. Bất cứ ai có thể giới thiệu một?Điều khiển phân trang ASP.NET

Tôi muốn một tài khoản không sử dụng Postback, hoặc chỉ là chuỗi truy vấn có thể tùy chỉnh.

Trả lời

4

Tôi đã mong đợi nhiều câu trả lời hơn nhưng có vẻ như nhiều người chỉ tự làm. Tôi đã tìm thấy một phong nha được duy trì khá thường xuyên trên codeproject.com

cp

Nó không hoàn toàn giống như stackoverflow.com một.Nó sẽ được tốt đẹp nếu có một kiểm soát nguồn mở phong nha mà đã có một loạt các tùy chọn đầu ra khác nhau.

2

Tôi đã làm việc với các điều khiển trang DevExpress và Telerik và thích máy nhắn tin DevExpress hơn. Tôi không phải là chắc chắn nếu máy nhắn tin DevExpress có thể làm việc trực tiếp với một chuỗi truy vấn nhưng tôi sẽ ngạc nhiên nếu nó không phải là rất linh hoạt. Theo phân trang giữa các trang hiện có sau khi tải xuống, mọi thứ có thể nằm trên máy khách hoặc, nếu một chuyến đi đến máy chủ là cần thiết, điều khiển được trang bị đầy đủ AJAX. Tôi đề nghị bạn bắt đầu tìm kiếm của bạn tại www.devexpress.com và sau đó kiểm tra www.Telerik.com cũng (cũng được trang bị AJAX).

2

Không phải là một kiểm soát, nhưng đây là cách để thực hiện phân trang ở cấp DB: SQL Server 2005 Paging

+0

tôi là sau khi một điều khiển :) –

+0

Cảm ơn downvote . Cho độ tuổi của câu hỏi và thiếu một bình luận, tôi sẽ giả định đó là một downmote trả thù què không liên quan đến câu trả lời thực tế. –

+0

Tôi đã không bỏ phiếu, thời gian qua tôi đã bỏ phiếu là tháng –

11

Đó là khá dễ dàng để cuộn của riêng bạn. Tôi tạo ra một điều khiển người dùng đơn giản dựa trên pager stack overflow với hai thuộc tính ...

  1. Tổng số trang có sẵn theo dữ liệu cơ bản
  2. Số lượng liên kết để hiển thị

Các lựa chọn trang được xác định bằng cách đọc chuỗi truy vấn. Thách thức lớn nhất là thay đổi URL bằng số trang mới. Phương pháp này sử dụng một tham số chuỗi truy vấn 'p' để xác định các trang để hiển thị ...

string getLink(int toPage) 
{ 
    NameValueCollection query = HttpUtility.ParseQueryString(Request.Url.Query); 
    query["p"] = toPage.ToString(); 

    string url = Request.Path; 

    for(int i = 0; i < query.Count; i++) 
    { 
     url += string.Format("{0}{1}={2}", 
      i == 0 ? "?" : "&", 
      query.Keys[i], 
      string.Join(",", query.GetValues(i))); 
    } 

    return url; 
} 

Một công thức đơn giản để xác định phạm vi của số trang để hiển thị ...

int min = Math.Min(Math.Max(0, Selected - (PageLinksToShow/2)), Math.Max(0, PageCount - PageLinksToShow + 1)); 
int max = Math.Min(PageCount, min + PageLinksToShow); 

Mỗi liên kết sau đó được tạo ra sử dụng một cái gì đó tương tự (nơi min và max xác định phạm vi của các liên kết trang để tạo ra) ...

for (int i = min; i <= max; i++) 
{ 
    HyperLink btn = new HyperLink(); 
    btn.Text = (i + 1).ToString(); 
    btn.NavigateUrl = getLink(i); 
    btn.CssClass = "pageNumbers" + (Selected == i ? " current" : string.Empty); 
    this.Controls.Add(btn); 
} 

Một cũng có thể tạo ra 'trước' nút (và 'Next') ...

HyperLink previous = new HyperLink(); 
previous.Text = "Previous"; 
previous.NavigateUrl = getLink(Selected - 1); 

Các nút đầu tiên và cuối cùng là thẳng về phía trước ...

HyperLink previous = new HyperLink(); 
previous.Text = "1"; 
first.NavigateUrl = getLink(0); 

Khi xác định thời gian hiển thị các "...", cho thấy một điều khiển đen khi phạm vi liên kết không phải là bên cạnh người đầu tiên hoặc các trang cuối cùng ...

if (min > 0) 
{ 
    Literal spacer = new Literal(); 
    spacer.Text = "&hellip;"; 
    this.Controls.Add(spacer); 
} 

Làm tương tự cho trên cho "tối đa < PageCount".

Tất cả mã này được đưa vào phương pháp ghi đè của CreateChildControls.

+0

Tôi đã nhận thấy nó cũng có [Trước] 1..2 3 4 5 ... 213 [Tiếp] –

+0

Lưu ý: Ví dụ này tạo ra các liên kết trang là 0 dựa trên, tức là p = 0 cho trang đầu tiên. Ví dụ có thể được thay đổi nếu liên kết trang đầu tiên cần phải là 1. Hy vọng có ý nghĩa và điều này sẽ hữu ích! – Tom

0

Bạn có thể thử NPager. Sử dụng chuỗi truy vấn cho các chỉ mục trang, không có postback. Cần Bootstrap để tạo kiểu tóc, tuy nhiên bạn có thể có các lớp học tùy chỉnh css của riêng bạn cho việc kiểm soát sử dụng 'pagination' CSS class.Here là làm việc DEMO

enter image description here

+0

Tôi nghĩ bạn nên có tuyên bố từ chối trách nhiệm để nói rằng đây là dự án của riêng bạn. –

+1

Có lỗi tôi nên có. –

Các vấn đề liên quan