2017-08-23 4 views
1

gvcmiというグリッドビューがあります。
DataBoundイベントでは、その値に基づいて列に色を付ける必要があります。 色付けしたい列は、データベースのテーブルの列にバインドされています。その列のデータ型は整数です。ここ は私の抜粋です:整数データ型の場合、グリッドビューでLabel値を見つけるにはどうすればいいですか

protected void gvcmi_DataBound(object sender, GridViewRowEventArgs e) 
     { 
      Label mylbl = (Label)e.Row.Cells[8].FindControl("lblStatusv"); 

      if (mylbl.Text == "1") 
       { 
        e.Row.Cells[8].BackColor = System.Drawing.Color.Green; 
        e.Row.Cells[8].ForeColor = System.Drawing.Color.White; 
       } 
     } 

これは、私はこのエラーを取得する実行すると:

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

私はこれは私が多分整数を文字列に変換するわけではないという事実によるなければならない知っていますか? しかし、変換をいつ行うのか分かりません。ここで

は、GridViewのコードです:

<asp:GridView id="gvcmi" 
       runat="server" 
       AutoGenerateColumns="false" 
       BorderWidth="1px" 
       BackColor="White" 
       CellPadding="3" 
       CellSpacing="2" 
       BorderStyle="Solid" 
       BorderColor="Black" 
       GridLines="Both" 
       Pager="30" 
       OnRowDataBound="gvcmi_DataBound" 
       OnRowCommand ="gvcmi_RowCommand" 
> 

<Columns> 

<asp:TemplateField HeaderText="Customer #" HeaderStyle-CssClass= "hdrBase" ItemStyle-CssClass="GridBase"> 
<ItemTemplate> 
<asp:LinkButton id="lbcustNum" runat="server" Text='<%#(Eval("customerid"))%>' CommandName="GetData" CommandArgument='<%# Container.DataItemIndex %>'/> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="Kana Name" HeaderStyle-CssClass= "hdrBase" ItemStyle-CssClass="GridBase"> 
<ItemTemplate> 
<asp:Label id="lblNameKana" runat="server" Text='<%#(Eval("namekana"))%>'/> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="Kanji Name" HeaderStyle-CssClass= "hdrBase" ItemStyle-CssClass="GridBase"> 
<ItemTemplate> 
<asp:Label id="lblNameKanji" runat="server" Text='<%#(Eval("namekanji"))%>'/> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="Gender" HeaderStyle-CssClass= "hdrBase" ItemStyle-CssClass="GridBase"> 
<ItemTemplate> 
<asp:Label id="lblgender" runat="server" Text='<%#(Eval("gender"))%>'/> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="Age" HeaderStyle-CssClass= "hdrBase" ItemStyle-CssClass="GridBase"> 
<ItemTemplate> 
<asp:Label id="lblage" runat="server" Text='<%#(Eval("age"))%>'/> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="Email" HeaderStyle-CssClass= "hdrBase" ItemStyle-CssClass="GridBase"> 
<ItemTemplate> 
<asp:Label id="lblemail" runat="server" Text='<%#(Eval("email"))%>'/> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="# Visits" HeaderStyle-CssClass= "hdrBase" ItemStyle-CssClass="GridBase"> 
<ItemTemplate> 
<asp:Label id="lblnov" runat="server" Text='<%#(Eval("numberofvisits"))%>'/> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="Latest Visit" HeaderStyle-CssClass= "hdrBase" ItemStyle-CssClass="GridBase"> 
<ItemTemplate> 
<asp:Label id="lbllatestv" runat="server" Text='<%#(Eval("latestvisit", "{0: MMMM dd日 (ddd)}"))%>'/> 
</ItemTemplate> 
</asp:TemplateField> 

<asp:TemplateField HeaderText="Visit Status" HeaderStyle-CssClass= "hdrBase" ItemStyle-CssClass="GridBase"> 
<ItemTemplate> 
<asp:Label id="lblStatusv" runat="server" Text='<%#(Eval("visitstatus"))%>'/> 
</ItemTemplate> 
</asp:TemplateField> 

</Columns> 

</asp:GridView> 

答えて

3

あなたがのプロパティにアクセスしているオブジェクトがnull

である場合にはnull条件チェック ?.を使用することができます

したがってif (mylbl?.Text == "1")System.NullReferenceExceptionを投げませんが、の場合は条件が合格しませんはnull

詳細については、https://csharp.today/c-6-features-null-conditional-and-and-null-coalescing-operators/を参照してください。

1

はこれを試してみてください:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    // check gridview row is not a header or footer 
    if(e.Row.RowType == DataControlRowType.DataRow) 
    { 
     // get correct Label value 
     string value = (e.Row.FindControl("lblStatusv") as Label).Text; 

     // convert string value into an integer value 
     int intValue = int.Parse(value); 

     if (intValue == 1) 
     { 
      e.Row.Cells[8].BackColor = System.Drawing.Color.Green; 
      e.Row.Cells[8].ForeColor = System.Drawing.Color.White; 
     } 
    } 

} 
関連する問題