如何在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
,但条件不会通过,如果mylbl
是null
请参阅 - 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;
}
}
}