Follow us on...
Follow us on Twitter Follow us on Facebook Watch us on YouTube

Reviews hay rinh note 4, galaxy V được vi vu Hàn Quốc

Gameshow “Ai Là Triệu Phú” trên VTV đang chờ đón bạn – Tải ngay!

Lời mời tham dự chương trình từ thiện "Giáng Sinh Trong Mắt Em"

Mời anh em tham gia Vn-zoom support team

Chiêm ngưỡng BaoMoi đẹp "tuyệt diệu" trên Windows Phone

Vn-Zoom.com tặng các bạn thành viên may mắn một chiếc Note 4
kết quả từ 1 tới 4 trên 4
  1. #1
    tritro's Avatar
    tritro vẫn chưa có mặt trong diễn đàn Búa Đá
    Tham gia
    Sep 2010
    Bài
    60
    Cảm ơn
    8
    Điểm
    53/24 bài viết

    Default Asp.net DataList Paging Phân trang dữ liệu với DataList

    Bài viết này minh họa cho bạn cách phân trang dữ liệu với DataList với các tùy chọn tự định nghĩa bao gồm trang đầu, trang tiếp, trang trước, trang cuối và danh sách các trang như

    Cũng có khá nhiều bạn muốn có demo về . Hôm nay tìm thấy ví dụ mẫu trên trang . Post lên đây chia sẻ với những bạn nào còn gặp vấn đề phân trang với DataList

    Trong code aspx cần có hai DataList

    1. hiển thị dữ liệu chúng ta cần phân trang
    2. dùng đề hiển thị danh sách các trang được hiển thị khi chọn một trang nào đó

    Bốn để hiển thị các liên kết Trang đầu, Trang sau, Trang trước, trang cuối

    Một Lable để hiển thị trang hiện tại trên tổng số trang.

    Phần code aspx này tôi sẽ không nêu ở đây. Bạn cần có thể ở liên kết cuối bài viết.

    Code C# chúng ta cần có 3 thuộc tính

    - - Trang hiện hành - fistIndex và lastIndex được dùng để phân trang DataList

    #private int CurrentPage
    {
    get
    {
    object objPage = ViewState["_CurrentPage"];
    int _CurrentPage = 0;
    if (objPage == null)
    {
    _CurrentPage = 0;
    }
    else
    {
    _CurrentPage = (int)objPage;
    }
    return _CurrentPage;
    }
    set { ViewState["_CurrentPage"] = value; }
    }
    private int fistIndex
    {
    get
    {

    int _FirstIndex = 0;
    if (ViewState["_FirstIndex"] == null)
    {
    _FirstIndex = 0;
    }
    else
    {
    _FirstIndex = Convert.ToInt32(ViewState["_FirstIndex"]);
    }
    return _FirstIndex;
    }
    set { ViewState["_FirstIndex"] = value; }
    }
    private int lastIndex
    {
    get
    {

    int _LastIndex = 0;
    if (ViewState["_LastIndex"] == null)
    {
    _LastIndex = 0;
    }
    else
    {
    _LastIndex = Convert.ToInt32(ViewState["_LastIndex"]);
    }
    return _LastIndex;
    }
    set { ViewState["_LastIndex"] = value; }
    }
    #endregion Chúng ta cũng cần một để thiết lập các tùy biến phân trang


    PagedDataSource _PageDataSource = new PagedDataSource();

    Hàm là hàm trả về dữ liệu là một DataTable, dữ liệu này sẽ là dữ liệu bạn lấy từ cơ sở dữ liệu qua các truy vấn. Bạn có thể tham khảo các bài viết khác nếu chưa biết cách truy vấn dữ liểu đổ vào một DataTable. Ở ví dụ này tôi tạo ra một DataTable và đổ dữ liệu vào với 100 bản ghi.

    private DataTable GetDataTable()
    {
    DataTable dtItems = new DataTable();

    DataColumn dcName = new DataColumn();
    dcName.ColumnName = "title";
    dcName.DataType = System.Type.GetType("System.String");
    dtItems.Columns.Add(dcName);

    DataRow row;
    for (int i = 1; i <= 155; i++)
    {
    row = dtItems.NewRow();
    row["title"] = "" + i;
    dtItems.Rows.Add(row);
    }
    return dtItems;
    }
    Hàm BindItemsList () sử dụng hàm GetDataTable để đổ dữ liệu vào DataList. Và hiển thị số trang hiện hành.

    /// <summary>
    /// Binding Main Items List
    /// </summary>
    private void BindItemsList()
    {

    DataTable dataTable = this.GetDataTable();
    _PageDataSource.DataSource = dataTable.DefaultView;
    _PageDataSource.AllowPaging = true;
    _PageDataSource.PageSize = 10;
    _PageDataSource.CurrentPageIndex = CurrentPage;
    ViewState["TotalPages"] = _PageDataSource.PageCount;

    this.lblPageInfo.Text = "Trang " + (CurrentPage + 1) + " của " + _PageDataSource.PageCount;
    this.lbtnPrevious.Enabled = !_PageDataSource.IsFirstPage;
    this.lbtnNext.Enabled = !_PageDataSource.IsLastPage;
    this.lbtnFirst.Enabled = !_PageDataSource.IsFirstPage;
    this.lbtnLast.Enabled = !_PageDataSource.IsLastPage;

    this.dListItems.DataSource = _PageDataSource;
    this.dListItems.DataBind();
    this.doPaging();
    }Với hàm này bạn có thể tùy biến giá trị PageSize (10) đưa vào biết của bàm (BindItemsList(int intPageSize)) để khi dử dụng bạn có tính tùy biến cao hơn. Trong hàm này có gọi hàm doPaging - đây là hàm thực hiện các vấn đề phân trang

    /// <summary>
    /// Binding Paging List
    /// </summary>
    private void doPaging()
    {
    DataTable dt = new DataTable();
    dt.Columns.Add("PageIndex");
    dt.Columns.Add("PageText");
    fistIndex = CurrentPage - 5;
    if (CurrentPage > 5)
    {
    lastIndex = CurrentPage + 5;
    }
    else
    {
    lastIndex = 10;
    }
    if (lastIndex > Convert.ToInt32(ViewState["TotalPages"]))
    {
    lastIndex = Convert.ToInt32(ViewState["TotalPages"]);
    fistIndex = lastIndex - 10;
    }
    if (fistIndex < 0)
    {
    fistIndex = 0;
    }
    for (int i = fistIndex; i < lastIndex; i++)
    {
    DataRow dr = dt.NewRow();
    dr[0] = i;
    dr[1] = i + 1;
    dt.Rows.Add(dr);
    }
    this.dlPaging.DataSource = dt;
    this.dlPaging.DataBind();
    }Trong hàm Page_Load chúng ta sẽ gọi hàm BindItemsList để hiển thị dữ liệu:

    protected void Page_Load(object sender, EventArgs e)
    {
    if (!IsPostBack)
    {
    this.BindItemsList();
    }
    }Chúng ta cũng cần viết code cho các sự kiện của các LinkButton tương ứng (Trang đầu, Trang trước, Trang sau, Trang cuối) như sau:

    protected void lbtnNext_Click(object sender, EventArgs e)
    {
    CurrentPage += 1;
    this.BindItemsList();
    }
    protected void lbtnPrevious_Click(object sender, EventArgs e)
    {
    CurrentPage -= 1;
    this.BindItemsList();
    }
    protected void lbtnLast_Click(object sender, EventArgs e)
    {
    CurrentPage = (Convert.ToInt32(ViewState["TotalPages"]) - 1);
    this.BindItemsList();
    }
    protected void lbtnFirst_Click(object sender, EventArgs e)
    {

    CurrentPage = 0;
    this.BindItemsList();
    }Hai sự kiện ItemCommand và ItemDataBound để hiển thị các giá trị CurrentPage và thiết lập các thuộc tính Style cho phân trang

    protected void dlPaging_ItemCommand(object source, DataListCommandEventArgs e)
    {
    if (e.CommandName.Equals("Paging"))
    {
    CurrentPage = Convert.ToInt16(e.CommandArgument.ToString());
    this.BindItemsList();
    }
    }
    protected void dlPaging_ItemDataBound(object sender, DataListItemEventArgs e)
    {
    LinkButton lnkbtnPage = (LinkButton)e.Item.FindControl("lnkbtnPaging");
    if (lnkbtnPage.CommandArgument.ToString() == CurrentPage.ToString())
    {
    lnkbtnPage.Enabled = false;
    lnkbtnPage.Style.Add("fone-size", "14px");
    lnkbtnPage.Font.Bold = true;

    }
    }



    Xem thêm hướng dẫn tại

  2. Có 3 thành viên cảm ơn tritro cho bài viết này:
    ba_quang (20-02-2011), kimlong008 (26-06-2011), solohoho (06-04-2012)

  3. #2
    ba_quang's Avatar
    ba_quang vẫn chưa có mặt trong diễn đàn Rìu Sắt Đôi
    Tham gia
    Mar 2009
    Đến từ
    Saigon, Vietnam
    Bài
    251
    Cảm ơn
    207
    Điểm
    40/28 bài viết

    Default

    hj, đúng cái mình đang cần Thanks bạn nhé!
    Nhưng mình muốn lấy dữ liệu từ CSDL thì làm sao nhỉ ?
    f

  4. #3
    cs2k2haui's Avatar
    cs2k2haui vẫn chưa có mặt trong diễn đàn Rìu Vàng Đôi
    Tham gia
    Dec 2010
    Bài
    1.446
    Cảm ơn
    926
    Điểm
    1.224/701 bài viết

    Default

    Bạn ơi biết cách nào phân Detailsview làm nhiều cột k?

  5. #4
    trongsaotruc's Avatar
    trongsaotruc vẫn chưa có mặt trong diễn đàn Gà Con
    Tham gia
    Apr 2009
    Bài
    3
    Cảm ơn
    0
    Điểm: 1/1 bài viết

    Default Phân trang tự do trong asp.net c#

    Trích cs2k2haui View Post
    Bạn ơi biết cách nào phân Detailsview làm nhiều cột k?

    Đây là cách phân tran ko dùng cung cụ .net (gridview,detail...) hoàn toàn bằng code .rất dễ sử dụng.
    Demo và download:



 

 

Tag của Đề tài này

Quyền sử dụng

  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi file đính kèm
  • Bạn không thể tự sửa bài viết của mình
  •