Trang chủ Liên hệ Sơ đồ  
 
Trang chủ 1001 Mẫu Web Thiết kế Web Lập trình Quản trị Web Web & Hosting Hình nền Blog Icon & Logo
 
 
     
       Mẫu web mới nhất
Xem | ID: 3448
Xem | ID: 20011245
ASP
Phần mềm :
Trình độ : Experienced
Đánh giá : /

Phân trang trong ASP.NET (Full) - Phần II
(Thứ Hai, 21/04/2008-10:20 AM)

Phân trang trong ASP.NET (Full) - Phần I
Cơ chế hoạt động như sau: khi web được load lần đầu tiên BindData sẽ lẫy dữ liệu của trang đầu tiền đó vào grid,đồng thời trong hàm này có việc gán property grid.VirtualItemCount = (int)dr[0]; đây là thuộc tính của DataGrid lưu lại tổng số bản ghi của table trả về và dùng nó để chia cho PageSize để ra được số lượng trang.
DataReader mỗi lần đọc chỉ lấy 1 bản ghi tức là trong bản ghi đó có 
Tại sao phải thêm lớp UserPT? Vì DataReader mỗi lần đọc chỉ lấy 1 bản ghi tức là trong bản ghi đó có FirstName, LastName ... vậy nên lớp này dùng để chứa dữ liệu tạm thời rồi đổ nó vào trong 1 ArrayList và từ ArrayList này đổ vào grid.Bạn có thể debug sẽ thấy mỗi lần thay đổi trang,số bản ghi trong biến list chỉ bằng số pageSize mà bạn đã định ra ở trên grid lúc đầu (PageSize="5"). Như vậy web sẽ chạy nhanh hơn.Hãy thử test nó với 1 database khoảng 1000 bản ghi,bạn sẽ thấy sự khác biệt giữa cách dùng DataSet.

Giao diện (*.aspx) :
<asp:DataGrid ID="grid" runat="server"
        AllowCustomPaging="true"
        AllowPaging="true"
        AutoGenerateColumns="false"
        PageSize="5">
        <Columns>
            <asp:BoundColumn DataField="FName" HeaderText="First Name"></asp:BoundColumn>
            <asp:BoundColumn DataField="LName" HeaderText="Last Name"></asp:BoundColumn>
            <asp:BoundColumn DataField="LoginName" HeaderText="Login Name"></asp:BoundColumn>
        </Columns>
        <PagerStyle Mode="NumericPages" />       
</asp:DataGrid>

Code Behind:
--------------------------------
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        BindData(grid.CurrentPageIndex + 1, grid.PageSize);
    }
}

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    //dang ki event khi ban chuyen Page
    grid.PageIndexChanged += new DataGridPageChangedEventHandler(grid_PageIndexChanged);
}

void grid_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
    //cap nhat lai page vua duoc chuyen toi
    grid.CurrentPageIndex = e.NewPageIndex;
    BindData(grid.CurrentPageIndex + 1, grid.PageSize);
}

protected void BindData(int page, int pageSize)
{
    //day la chuoi ket noi de sqlserver ban phai viet lai cho phu hop
      string connStr = "data source=SQLSERVER;database=PT2;user=sa;password=tc0ffsh0re;Min Pool Size=3;Max Pool Size=10;Connect Timeout=30;";
      SqlConnection conn = new SqlConnection(connStr);
      ArrayList list = new ArrayList();
    try
      {
         conn.Open();
           SqlCommand cmd = conn.CreateCommand();
           cmd.CommandType = CommandType.StoredProcedure;
           cmd.CommandText = "usp_PagingData";
           SqlParameter[] sqlParams = new SqlParameter[2];
           sqlParams[0] = new SqlParameter("@pageNum", page);
           sqlParams[1] = new SqlParameter("@pageSize", pageSize);
           cmd.Parameters.AddRange(sqlParams);
          SqlDataReader dr = cmd.ExecuteReader();
          while (dr.Read())
          {
               serPT item = new UserPT();
                item.FName = (string)dr["FirstName"];
                item.LName = (string)dr["LastName"];
                tem.LoginName = (string)dr["LoginName"];
                list.Add(item);
          }

           if (dr.NextResult())
           {
                if (dr.Read())
                {
                     grid.VirtualItemCount = (int)dr[0];
                }
           }

           grid.DataSource = list;
           grid.DataBind();               
       }
       catch (Exception)
       {
           throw;
       }
       finally
       {
           conn.Close();
       }
}

Chèn thêm lớp UserPT vào để làm chỗ chứa dữ liệu khi lấy từ DataReader ra.Vì trong web chúng ta không nên dùng DataSet-sẽ làm giảm tốc độ của web.Nên dùng DataReader.

    public class UserPT
    {
        private string fName;
        private string lName;
        private string loginName;

        public string FName
        {
            get { return this.fName; }
            set { this.fName = value; }
        }

        public string LName
        {
            get { return this.lName; }
            set { this.lName = value; }
        }

        public string LoginName
        {
            get { return this.loginName; }
            set { this.loginName = value; }
        }

        public UserPT()
        { }
    }



Nguồn: chungta.com

3C   “ Trang CNTT hàng đầu Việt Nam – 1001 Software & Ebooks download miễn phí"  www.3c.com.vn

 In bài này  Gửi bài viết
    Các bài trước
    Các bài sau
      Bài quan tâm nhiều nhất