2014-08-29 6 views
0

У меня проблема на GridView в жерех чистой 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

+0

У меня есть вопрос, спасибо. –

+0

Избавьтесь от 'catch (Exception ex) {throw ex;}'. Все, что делает, это испортить трассировку стека. Похоже, что исключение исходило от _that_. Вам это нехорошо. Избавиться от этого. –

ответ

0

Скорее всего, эта линия:

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

работает в исключение.

Пожалуйста, убедитесь, что вы передали Year_month в качестве параметра в вашем поисковом URL-адресе, чтобы он работал при повторной привязке к сетке.

Другое дело, что вы можете попробовать, (как отказоустойчивый), чтобы проверить, если Request.QueryString["Year_month"] не NULL. Попробуйте преобразовать его в значение String, только если оно не равно null.

+0

Но при первом связывании gridview заполняется значениями, извлеченными с помощью переменной querystring, почему при изменении страницы у меня есть ошибка? спасибо вам –

+0

Для пейджинга мы обычно передаем параметр как номер страницы, а также все параметры с родительской страницы, в вашем случае Year_month. Посмотрите, является ли строчный URL-адрес, похожий на 'view.aspx? Year_month = value & page = 2' –

+0

Не URL-адрес следующей страницы: http: //...../ default.aspx' –

Смежные вопросы