Đăng ký vps giá rẻ, tên miềndomain. Việc kiểm tra và mua tên miền giá rẻ, domain giá rẻ, hosting giá rẻ, máy chủ ảo giá rẻserver giá rẻ chỉ với 2 bước đơn giản. Giúp bạn tiên phong trong kinh doanh Online

Asp.net
 9ecva.com - 9e Chu Van An Forever : Asp.net
Tiêu đề Chủ đề: Phân trang trong ASP.NET (Full) Trả lời bài viếtGửi bài viết mới
Tác giả
Nội dung << Chủ đề trước | Chủ đề kế tiếp >>
DUCVINH83
Administrator
Administrator
Avatar
Không ngừng học hỏi !

Ngày gia nhập: 01/11/2005
Giới tính:
Đến từ: Vietnam
Trạng thái:
Bài viết: 365
Tiền: 738$
Địa chỉ e-mail: Gửi mail
Yahoo! IM: Yahoo! IM
Sinh nhật: 17/02/1983
Cảnh cáo: (0%)
Minus 1 warningCurrent warnlevel: 0%Add 1 warning
Ngày gửi: 05/06/2009 lúc 9:32 sáng | Đã khóa IP Trích dẫn DUCVINH83

Một ví dụ và hướng dẫn cách làm về paging-phân trang trong asp.net.

* Tại sao phải paging?Vì làm như vậy để tăng tốc độ truy cập cho trang web,thẩm mỹ...
* Quan trọng nhất của paging là gì?Là việc lấy dữ liệu làm sao cho chính xác!
    Việc này nhờ vào 1 store sau
-------------------
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[usp_PagingData]
    @pageNum int,
    @pageSize int
AS
Begin
    Begin
    WITH s AS
    (
        SELECT ROW_NUMBER() OVER(ORDER BY FirstName, UserID) AS RowNum, *
        FROM dbo.[user]
    )
    Select * From s
    Where RowNum Between (@pageNum - 1) * @pageSize + 1 AND @pageNum * @pageSize
    End
    Select Count(*) as Total from [user]
End
----------------------
Store này có 2 thông số :
* @pageNum :Trang hiện tại
* @pageSize : số bản ghi muốn hiển thị trên 1 trang
Trả về : 
* Những bản ghi mong muốn
* Tổng số bản ghi
Vậy là xong phần database,phần còn lại là viết code trên .NET.




__________________

YM: DUCVINH83
0912 822334


Lên trên Xem DUCVINH83's Thông tin cá nhân Tìm những bài viết khác của DUCVINH83 Ghé thăm DUCVINH83's Trang chủ
 
DUCVINH83
Administrator
Administrator
Avatar
Không ngừng học hỏi !

Ngày gia nhập: 01/11/2005
Giới tính:
Đến từ: Vietnam
Trạng thái:
Bài viết: 365
Tiền: 738$
Địa chỉ e-mail: Gửi mail
Yahoo! IM: Yahoo! IM
Sinh nhật: 17/02/1983
Cảnh cáo: (0%)
Minus 1 warningCurrent warnlevel: 0%Add 1 warning
Ngày gửi: 05/06/2009 lúc 9:33 sáng | Đã khóa IP Trích dẫn DUCVINH83

Như ở phần I đã nói cách làm sao lấy được dữ liệu từ database,bây giờ là phần phía trên .NET-dùng 1 cái DataGrid để làm.Bạn hoàn toàn có thể dùng GridView để làm,đến đây chỉ phụ thuộc vào việc bạn muốn thể hiện ra làm sao thô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=tc0ffs h0re;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()
        { }
    }



chungta.com



__________________

YM: DUCVINH83
0912 822334


Lên trên Xem DUCVINH83's Thông tin cá nhân Tìm những bài viết khác của DUCVINH83 Ghé thăm DUCVINH83's Trang chủ
 

Nếu bạn muốn trả lời thì trước tiên bạn phải đăng nhập
Nếu chưa đăng ký thì bạn hãy đăng ký

  Trả lời bài viếtGửi bài viết mới
Xem trang in Xem trang in

Di chuyển nhanh
Bạn không thể tạo đề tài mới
Bạn không thể trả lời bài viết
Bạn không thể xoá bài viết bạn đã gưi
Bạn không thể sửa bài viết bạn đã gửi
Bạn không thể tạo bình chọn
Bạn không thể bình chọn



Trang này được tạo ra trong 0.2188 giây.
cheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salecheap jordans for salesac longchamp pas chergucci outlet

baomang.net  9ecva.com © 2007 - Phát triển bởi Trịnh Đức Vinh