如何隐藏转发器中的列?

时间:2013-08-02 22:45:45

标签: c# asp.net repeater

在这里,我发现一旦代码很容易隐藏转发器列。它的效果很好。

<ItemTemplate>
      <tr>
            <td><asp:Label runat="server" ID="label1" /></td>
            <% if (MustBeVisible) { %>
            <td"><asp:Label runat="server" ID="label2" /></td>
            <% } %>
      </tr>
</ItemTemplate>

但是现在,我需要将一个CLASS应用于TableRow并使其成为runat =“server”以便在ItemDataBound中应用颜色条件但是当我添加runat =“server”的属性时,我遇到了冲突运行时和警告。

  

ASP.NET运行时错误:此上下文不支持代码块

例如,想法是在ItemDataBound中评估label1,如果它是真的必须在TR上应用一个Class使其变灰。

了解最佳方法或如何解决此问题?

3 个答案:

答案 0 :(得分:2)

方法1:

首先,定义一个bool属性,在数据项类中说ShouldBeGreyed(如果可能)。此属性应返回数据项是否显示为灰色。

然后,在转发器标记中使用它:

<ItemTemplate>
    <tr<%# ((bool)Eval("ShouldBeGreyed"))?"class='grey'":"" %>>
    ...
</ItemTemplate>

方法2:

首先,在代码隐藏中定义一个方法,比如ShouldBeGreyed,如下所示:

protected bool ShouldBeGreyed(object item)
{
    // cast to your data-item
    var dataItem = (<class-of-your-data-item>)item;

    // Determine if it should be greyed out
    // bool shouldBeGreyed = ...
    ...

    return shouldBeGreyed;
}

现在在转发器标记中使用它:

<ItemTemplate>
    <tr<%# ((bool)ShouldBeGreyed(Container.DataItem))?"class='grey'":"" %>>
    ...
</ItemTemplate>

答案 1 :(得分:0)

使用类似的东西。在标签的可见部分写下方法。

 <td><asp:Label runat="server" ID="label2" Visible="<%# MustBeVisible() %>" /></td>

如果您希望td不可见/可见,请使用此

 <td runat="server visible="<%# MustBeVisible() %>"><asp:Label runat="server" ID="label2" /></td>

答案 2 :(得分:0)

如果您使用了<td id="tablerow" runat="server"/>,可以使用以下内容:

tablerow.Attributes.Add("class", className);