2017-05-05 91 views
0

我有一個模板字段的問題,我在Grid View的一行中爲數據創建鏈接。當我第一次運行我的頁面時,它工作正常,但後來當我在該網格視圖中隱藏一些其他列時,我想回到我的第一個視圖(我顯示隱藏的所有列)後面的代碼拋出空指針異常。但是對於該網格的查詢是相同的,並且列是相同的。當我隱藏並添加一些列到我的代碼時,總會發生。GridView中的TemplateField Asp.Net Web窗體

請如果你能幫助我,我將非常感激。

   <asp:TemplateField HeaderText="zz" Visible="False"> 
       <ItemTemplate> 
       <asp:Label ID="Label_typ" runat="server" 
       Text='<%# Eval("TYP") %>'></asp:Label> 
        <br> </br> 

       </ItemTemplate> 
      </asp:TemplateField> 

女巫背後的代碼使我的所有代碼複雜化。沒有它,它工作正常。

 if (actualYear.Equals(dd_rok22.SelectedValue)) 
     { 
      int numberOfWeek = 1; 
      for (int i = Convert.ToInt32(actualMonth); i <= 12; i++) 
      { 
       GRID_VIEW_MAKRO.Columns[i + 7].Visible = false; 
       if (i == Convert.ToInt32(actualMonth)) 
       { 
        int numberColumnActual = i; 
        BoundField field2 = new BoundField(); 
        GRID_VIEW_MAKRO.Columns.Insert(numberColumnActual + 3, field2); 

        for (int j = 1; j <= weekNumberActualMonth; j++) 
        { 
         BoundField field = new BoundField(); 
         GRID_VIEW_MAKRO.Columns.Insert(numberColumnActual + 3, field); 

         field.HeaderText = "M" + actualMonth + "_T" + numberOfWeek; 
         field.DataFormatString = "{0:###,###}"; 
         numberColumnActual++; 
         numberOfWeek++; 
        } 
        for (int numberOfWeekPrevious = numberOfWeek; numberOfWeekPrevious <= 4; numberOfWeekPrevious++) 
        { 

         BoundField field = new BoundField(); 
         GRID_VIEW_MAKRO.Columns.Insert(numberColumnActual + 2, field); 

         field.HeaderText = "M" + previousMonth2 + "_T" + numberOfWeek; 
         field.DataFormatString = "{0:###,###}"; 
         numberOfWeek++; 
         numberColumnActual++; 
        } 

       } 
      } 
     } 

而異常顯示當我創建標籤女巫有空值,因爲TemplateField有空值。

protected void OnRowCreated(object sender, GridViewRowEventArgs e) 
    { 


     if (e.Row.RowType == DataControlRowType.DataRow) 
     { 
      string mregion= DataBinder.Eval(e.Row.DataItem, "MAKRO_NAME").ToString(); 





      Label lbl = (Label)e.Row.FindControl("Label_typ"); 

      string CellValue = Convert.ToString(DataBinder.Eval(e.Row.DataItem, "ROK")); 

//it cannot Trim me null value.. 
      string ID = lbl2.Text.Trim() + '_' + lbl3.Text.Trim(); 

      e.Row.Attributes.Add("onclick", "top.location.href='report_se.aspx?nazwa=" + ID + "&ye=" + CellValue + "';"); 


     } 
    } 

回答

0

1)使某些字段可見爲false應該不會在運行時產生任何錯誤。

2)對於空指針異常,我認爲你試圖對空值進行類型轉換。如果您的任何字段包含空值,那麼建議在對其進行類型轉換之前對其進行檢查。

+0

Add。 1我認爲這不應該是一個問題,但是當我這樣做時就會發生。 Add。 2當我調試我的代碼時,它在編譯代碼之前看起來像在OnRoWCreated方法中,它創建了一個TemplateField,並且它工作正常。但是在編譯'OnRowCreated'時創建和隱藏其他列之後,它不創建'TemplateField'(它看起來像compilator didint在aspx代碼中看到這些字段)。 – Adriano