2017-05-05 12 views
0

グリッドビューの行のデータのリンクを作成するテンプレートフィールドに問題があります。私のページを最初に実行するときは正常に動作しますが、後でそのグリッドビューの他の列を非表示にして、最初のビュー(隠していたすべての列を表示)に戻したいときにnullポインタ例外をスローする。しかし、そのグリッドのクエリは同じで、列は同じです。それは私のコードにいくつかの列を隠して追加するといつも起こります。GridView Asp.Net WebフォームのTemplateField

私が非常に感謝してくれることを私が助けてくれるのであれば、どうか宜しくお願い致します。

   <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がヌル値を持つためにnull値を持っていることを示しています。

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)NULLポインタの例外については、null値を型キャストしようとしていると思います。いずれかのフィールドにNULL値が含まれている場合は、型キャストする前にチェックすることをお勧めします。

+0

追加。 1それは問題ではないはずだと思うが、私がこれをすると起こる。 追加します。 2私のコードをデバッグすると、コードをコンパイルする前に 'OnRoWCreated'メソッドのように見えますが、私はTemplateFieldを作成して、うまく動作します。しかし、 'OnRowCreated'をコンパイルするときに他のカラムを作成して隠す操作が行われた後は、その' TemplateField'を作成しません(コンパイラdidintはFieldsをaspxコードで見ています)。 – Adriano

関連する問題