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

时间:2017-08-23 13:23:29

标签: c# asp.net gridview integer nullable

我有一个名为 gvcmi 的网格视图 在DataBound事件中,我希望根据其值为颜色添加颜色。 我想要着色的列绑定到数据库中我的表中的列。该列的数据类型是整数。 这是我的片段:

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   对象引用未设置为对象的实例

我知道这必须是因为我没有将整数转换为字符串吗? 但我不确定何时进行转换。

这是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>

2 个答案:

答案 0 :(得分:3)

如果您要访问的属性为?.

,则可以使用空条件检查null

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

,则不会通过该条件

有关详细信息,请参阅 - https://csharp.today/c-6-features-null-conditional-and-and-null-coalescing-operators/

答案 1 :(得分: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;
        }
    }

}