如何在gridview中找到标签值,当它是整型数据类型

问题描述:

我有一个名为gvcmi的gridview。
而在DataBound事件中,我想根据其值为某一列着色。 我想要着色的列绑定到数据库中的表中的一列。该列的数据类型是整数。 这里是我的代码片段:如何在gridview中找到标签值,当它是整型数据类型

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> 

您可以使用一个空条件检查?.如果你正在访问的属性的对象是null

因此if (mylbl?.Text == "1")不会抛出System.NullReferenceException,但条件不会通过,如果mylblnull

请参阅 - https://csharp.today/c-6-features-null-conditional-and-and-null-coalescing-operators/了解更多信息。

试试这个:

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; 
     } 
    } 

}