2014-08-29 82 views
0

我有問題,在GridView控件在ASP.NET的C#分頁GridView控件在asp.net C#分頁

這GridView控件中填充,其中被稱爲在查詢字符串傳遞一個值的查詢。

在第一次綁定GridView中的輸出是正確的,但是當我在改變頁面上嘗試GridView響應時出現以下錯誤。

Exception Details: System.NullReferenceException: Object reference not 
set to an instance of an object. 

在此行中公衆的DataTable GridViewBind()

throw ex; 

我認爲錯誤是從在重新加載頁面消失在查詢字符串值造成的。

我的代碼如下,我將不勝感激任何幫助,您可以給我解決這個問題。

public DataTable GridViewBind() 
{ 
     sql = " SELECT * from tbl_premium WHERE Year_month = ?; "; 

    try 
    { 
     dadapter = new OdbcDataAdapter(sql, conn); 

     if (!string.IsNullOrEmpty(Request.QueryString["Year_month"].ToString())) 
     { 
      dadapter.SelectCommand.Parameters.Add("param1", Request.QueryString["Year_month"].ToString()); 
     } 

     dset = new DataSet(); 
     dset.Clear(); 
     dadapter.Fill(dset); 
     DataTable dt = dset.Tables[0]; 
     GridView1.DataSource = dt; 

     GridView1.DataBind(); 
     return dt; 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    finally 
    { 
     dadapter.Dispose(); 
     dadapter = null; 
     conn.Close(); 
    } 
} 


protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    GridViewBind(); 
    GridView1.DataSource = dset.Tables[0]; 
    GridView1.PageIndex = e.NewPageIndex; 
    GridView1.DataBind(); 

} 

protected void ddlPages_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    GridViewRow gvrPager = GridView1.BottomPagerRow; 
    DropDownList ddlPages = (DropDownList)gvrPager.Cells[0].FindControl("ddlPages"); 
    GridViewBind(); 
    GridView1.DataSource = dset.Tables[0]; 
    GridView1.PageIndex = ddlPages.SelectedIndex; 
    GridView1.DataBind(); 

} 

protected void Paginate(object sender, CommandEventArgs e) 
{ 
    int intCurIndex = GridView1.PageIndex; 

    switch (e.CommandArgument.ToString().ToLower()) 
    { 
     case "First": 
      GridView1.PageIndex = 0; 
      break; 
     case "Prev": 
      GridView1.PageIndex = intCurIndex - 1; 
      break; 
     case "Next": 
      GridView1.PageIndex = intCurIndex + 1; 
      break; 
     case "Last": 
      GridView1.PageIndex = GridView1.PageCount - 1; 
      break; 
    } 
    GridView1.DataBind(); 
} 
+0

告訴我們錯誤發生在哪一行,所以我們不必猜測。另外,我看到你有這樣一行'GridView1.DataSource = dset.Tables [0];'但你不會在任何地方顯示'dset'對象的初始化。 – mason 2014-08-29 13:48:26

+0

我已編輯該問題,謝謝。 – 2014-08-29 13:52:26

+0

擺脫'catch(Exception ex){throw ex;}'。所有這一切都搞亂了你的堆棧跟蹤。它看起來像是_that_行的異常。你沒有好處。擺脫它。 – 2014-08-29 13:54:59

回答

0

最有可能的,這條線:

if (!string.IsNullOrEmpty(Request.QueryString["Year_month"].ToString())) 

正進入一個例外。

請確保您將Year_month作爲參數傳遞給您的分頁url,以便它在重新綁定gridview時有效。

另一件您可能會嘗試(作爲故障安全)的方法是檢查Request.QueryString["Year_month"]是不是NULL。嘗試將其僅轉換爲字符串值,如果它不爲空。

+0

但是在第一次綁定時,gridview被填充了用變量querystring提取的值,爲什麼當更改頁面時我有錯誤?謝謝你 – 2014-08-29 14:02:34

+0

對於分頁,我們通常將參數作爲頁碼傳遞給參數,同時也將父頁中的所有參數傳遞給你,例如Year_month。查看錶單的分頁網址是否像'view.aspx?Year_month = value&page = 2' – 2014-08-29 14:14:38

+0

不是下一頁的網址是'http://...../ default.aspx' – 2014-08-29 14:21:31