5

這個問題似乎很常見,我已經通過這個answer使用SqlDataAdapter來頁面SqlDataReader源

不幸的是,我的頁面仍未被分頁。這裏是我的代碼在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(); 

不幸的是,當我這樣做時,我的分頁不出現。難道我做錯了什麼?

感謝

+1

您是否在選擇時獲得了15條記錄?另外,在Databind()方法被調用之前,設置所有Paging相關的屬性。 –

+0

哇,那很簡單。我只需在數據綁定()之前設置它。謝謝! – Kevin

+0

哦,OnPageIndexChanging和OnPageIndexChanged有什麼區別? – Kevin

回答

6

設置所有尋呼相關的屬性之前被稱爲Databind()方法。當您使用自定義尋呼您將不得不處理GridView1_PageIndexChanging事件。你需要改變當前的PageIndex,並重新綁定你GridView這樣的:

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(); 
} 

如果您還結合上Page_Load GridView控件,像這樣做:

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

我的第一個數據綁定()在pageLoad上。但是,當我將if(!IsPostBack)添加到GridView1_PageIndexChanging內容中時,當我點擊進入gridview的下一頁時,第一次沒有任何反應。當我再次點擊時,它會進入下一頁。如果沒有if語句,它會在第一次點擊時這樣做 – Kevin

+0

不要將!IsPostBack添加到PageIndexChanging中,只是在Page_Load中,正如我在答案中所說:)我會用事件更新它以避免混淆:P –

+0

好的非常感謝!出於好奇,這是做什麼的?因爲它似乎在頁面加載中沒有!IsPostBack工作? – Kevin

3

您需要添加PageIndexChanging事件GridView啓用paging

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