如何引用Gridview TemplateField行?

时间:2016-10-26 20:59:45

标签: c# asp.net gridview

这是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的单元格不可见。 intValuesint,来自数据库。 gvCustomersID的{​​{1}}。

GridView怎么办不起作用,但更重要的是,我们怎样才能让它发挥作用?

2 个答案:

答案 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%保证网格视图是数据绑定的,并且所有控件都已创建。