5

Câu hỏi này có vẻ là phổ biến và tôi đã trải qua điều này answer rồi.Sử dụng SqlDataAdapter để trang nguồn SqlDataReader

Rất tiếc, trang của tôi vẫn không được phân trang. Dưới đây là những gì mã của tôi trông giống như trong C#:

SqlCommand command = new SqlCommand("(SELECT ......", Connection); 
SqlDataAdapter myAdapter = new SqlDataAdapter(command); 
DataTable dt = new DataTable(); 
myAdapter.Fill(dt); 

command.Connection = connection; 
command.Connection.Open(); 

GridView1.DataSource = dt; 
GridView1.DataBind(); 
GridView1.AllowPaging = true; 
GridView1.PageSize = 15; 

command.Connection.Close(); 
command.Connection.Dispose(); 

Thật không may, khi tôi làm điều này, phân trang của tôi không hiển thị. Tôi có làm điều gì sai?

Cảm ơn

+1

Bạn có nhận được hơn 15 bản ghi với lựa chọn của mình không? Ngoài ra, đặt tất cả các thuộc tính liên quan đến phân trang TRƯỚC KHI phương thức Databind() được gọi. –

+0

Chà, thật dễ dàng. Tôi chỉ cần đặt nó trước databind(). Cảm ơn! – Kevin

+0

Oh sự khác nhau giữa OnPageIndexChanging và OnPageIndexChanged là gì? – Kevin

Trả lời

6

Set tất cả các thuộc tính liên quan đến Paging trước phương pháp Databind() được gọi. Khi bạn sử dụng Phân trang tùy chỉnh, bạn sẽ phải xử lý sự kiện GridView1_PageIndexChanging. Bạn cần phải thay đổi PageIndex hiện tại, và tái kết GridView của bạn như thế này:

void bindGridview() 
{ 
    SqlCommand command = new SqlCommand("(SELECT ......", Connection); 
    SqlDataAdapter myAdapter = new SqlDataAdapter(command); 
    DataTable dt = new DataTable(); 
    myAdapter.Fill(dt); 

    command.Connection = connection; 
    command.Connection.Open(); 
    GridView1.AllowPaging = true; 
    GridView1.PageSize = 15; 
    GridView1.DataSource = dt; 
    GridView1.DataBind(); 


    command.Connection.Close(); 
    command.Connection.Dispose(); 
} 

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView1.PageIndex = e.NewPageIndex; 
    bindGridview(); 
} 

Nếu bạn cũng đang ràng buộc GridView trên Page_Load, làm điều đó như thế này:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!IsPostBack) 
     bindGridview(); 
} 
+0

Databind đầu tiên của tôi() nằm trên pageLoad. Tuy nhiên, khi tôi thêm if (! IsPostBack) vào công cụ GridView1_PageIndexChanging của tôi, khi tôi bấm vào để đi đến trang tiếp theo của GridView, không có gì xảy ra lần đầu tiên. Khi tôi bấm một lần nữa, sau đó nó đi đến trang tiếp theo. Nếu không có câu lệnh if, nó làm như vậy trên lần nhấp đầu tiên – Kevin

+0

Đừng thêm IsPostBack vào PageIndexChanging, chỉ trong Page_Load như tôi đã nói trong câu trả lời :) Tôi sẽ cập nhật nó với sự kiện để tránh nhầm lẫn: P –

+0

Ah ok tuyệt vời cảm ơn! Trong sự tò mò, điều này làm gì? Bởi vì nó có vẻ làm việc mà không có! IsPostBack trong tải trang? – Kevin

3

Bạn cần phải thêm sự kiện PageIndexChanging của GridView để bật paging.

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridView1.PageIndex = e.NewPageIndex; 
    bindGridview(); 
}