这是Gridview中的第10列的templatefield
<asp:TemplateField>
<HeaderTemplate>
<asp:Label runat="server">Active Licenses</asp:Label>
</HeaderTemplate>
<ItemTemplate>
<asp:Label ID="lblActiveCodes" runat="server" Text='intValues'></asp:Label>
</ItemTemplate>
</asp:TemplateField>这里是在foreach循环中引用它的地方。
foreach (GridViewRow row in gvCustomers.Rows)
{
if (row.Cells[10].Text.Equals(0))
{
row.Visible = false;
}
}这是GridView中的第10列,我希望将值为0的单元格设置为不可见。intValues是来自数据库的int。gvCustomers是我的GridView的ID。
为什么row.Cells[10]不能工作,但更重要的是,我们如何让它工作?
发布于 2016-10-27 05:06:42
将双引号加到零。文本类型为字符串。
if ((row.Cells[10].FindControl("lblActiveCodes") as Label).Text.Equals("0"))发布于 2016-10-27 05:09:21
这里有很多问题。
首先,要将列绑定到标签文本,您需要使用Eval,您当前拥有的只是字面上的文本"intValues“。所以:
Text='<%# Eval("intValues") %>'其次,label是一个服务器端控件。单元格将包含一个控件,而不是简单的文本。所以你应该寻找这个控件。顺便说一句,您可以对整行执行此操作,因此不需要计算列索引:
Label label = row.FindControl("lblActiveCodes") as Label;第三,一旦value被绑定到标签文本,它现在就是一个字符串。如果列值不是字符串,则会通过ToString调用将其转换为字符串。所以:
if (label != null && label.Text != "0")
{
row.Visible = false;
}最后但并非最不重要的一点是,您没有提到何时运行这段代码。它并不总是有效的,网格视图已经绑定了数据。运行这样的东西的最佳时机是RowDataBound事件,在这种情况下,您不需要迭代行,并且您可以100%保证网格视图是数据绑定的,并且所有控件都已创建。
https://stackoverflow.com/questions/40272016
复制相似问题