【问题标题】:How to reference Gridview TemplateField row?如何引用 Gridview TemplateField 行?
【发布时间】:2016-10-26 20:59:45
【问题描述】:

这是templatefield,即Gridview 中的第10 列:

<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,来自数据库。 gvCustomers 是我的GridViewID

为什么row.Cells[10] 不起作用,但更重要的是,我们怎样才能使它起作用?

【问题讨论】:

  • 您可以像这样设置Visible 属性Visible='&lt;%#GetVisible(Eval("intValues ").ToString())%&gt;' 然后在后面代码的GetVisible 方法中检查它是否等于0,然后返回false。检查我 7 小时前回答的这个问题会对您有所帮助:stackoverflow.com/questions/40263845/…

标签: c# asp.net gridview


【解决方案1】:

将双引号添加到零。文本类型是字符串。

if ((row.Cells[10].FindControl("lblActiveCodes") as Label).Text.Equals("0"))

【讨论】:

    【解决方案2】:

    这里有很多问题。

    首先,要将列绑定到您需要使用 Eval 的标签文本,您目前拥有的只是一个文本“intValues”字面意思。所以:

    Text='<%# Eval("intValues") %>'
    

    第二,label是一个服务端控件。单元格将包含一个控件,而不是简单的文本。所以你应该寻找这个控件。顺便说一句,您可以对整行执行此操作,因此无需计算列索引:

    Label label = row.FindControl("lblActiveCodes") as Label;
    

    第三,一旦值绑定到标签文本,它现在就是一个字符串。如果列值不是字符串,它将通过 ToString 调用转换为一个。所以:

    if (label != null && label.Text != "0")
    {
        row.Visible = false;
    }
    

    最后但并非最不重要的一点是,您在运行此代码时没有提及。它并不总是有效,网格视图必须已经绑定数据。运行类似事件的最佳时间是 RowDataBound 事件,在这种情况下,您不需要遍历行,并且您可以 100% 保证网格视图是数据绑定的并且所有控件都已创建。

    【讨论】:

      猜你喜欢
      • 2018-10-11
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多