Đó 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 ...
- Tổng số trang có sẵn theo dữ liệu cơ bản
- 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 = "…";
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.
tôi là sau khi một điều khiển :) –
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ế. –
Tôi đã không bỏ phiếu, thời gian qua tôi đã bỏ phiếu là tháng –