这是templatefield
中第10列的Gridview
:
<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
是ID
的{{1}}。
GridView
怎么办不起作用,但更重要的是,我们怎样才能让它发挥作用?
答案 0 :(得分:1)
将双引号添加到零。文本类型是字符串。
select f.id, min(f.name) name, count(*) awards
from films f join film_awards fa on f.id = fa.film_id
group by f.id
答案 1 :(得分:0)
这里有很多问题。
首先,要将列绑定到标签文本,您需要使用Eval,您目前所拥有的只是文本“intValues”。所以:
Text='<%# Eval("intValues") %>'
其次,label是服务器端控件。 Cell将包含一个控件,而不是一个简单的文本。所以你应该寻找这种控制。顺便说一句,您可以为整行执行此操作,因此无需计算列索引:
Label label = row.FindControl("lblActiveCodes") as Label;
第三,一旦将值绑定到标签文本,它现在就是一个字符串。如果列值不是字符串,则它将转换为使用ToString调用的值。所以:
if (label != null && label.Text != "0")
{
row.Visible = false;
}
最后但并非最不重要的是,您没有提到何时运行此代码。它并不总是有效,网格视图必须已经是数据绑定。运行类似事件的最佳时间是RowDataBound事件,在这种情况下,您不需要遍历行,并且您还100%保证网格视图是数据绑定的,并且所有控件都已创建。