asp:TableRow设置可见属性不起作用

时间:2011-03-16 16:37:16

标签: c# asp.net

我正在开发一个.NET 3.5 Web应用程序,它通过接口实现显示/隐藏ascx文件中包含的表行(包含该表的控件实现接口)。

所以,考虑到.ascx中的这个标记:

<asp:Table id="MyTable" runat="server">
<asp:TableRow ID="Foo" runat="server">
        <asp:TableCell ID="FooCell"
            runat="server"  ColumnSpan="3">
            //Cell contents omitted
        </asp:TableCell>
<asp:TableCell .... ellided
    </asp:TableRow>
</asp:Table>

界面:

public interface IMyInterface
{
    Table GetPageDataTable();
}

ascx代码背后的实现:

#region IMyInterface Members

    public Table GetPageDataTable()
    {
        return MyTable;
    }

    #endregion

当我在包含页面中使用下面的方法时,当我循环遍历表行时,contains语句返回true,但是行的Visible属性= false。

private void SetVisibleRows(IMyInterface control)
    {
        // the list stored in session contains 'Foo'
        List<string> choices = (List<string>)Session["selectionsList"]; 

        Table tbl = control.GetPageDataTable();

        foreach (TableRow r in tbl.Rows)
        {
            //r.ID == 'Foo'
            r.Visible = choices.Contains(r.ID, StringComparer.OrdinalIgnoreCase);
        }             
  }

我也在控件的代码隐藏中直接尝试了这个,甚至设置了Foo.Visible = true;仍然在调试窗口中显示visible = false。

任何有关这方面的帮助都会受到赞赏,因为这会让我感到沮丧。我有另一个实现界面的控件,它可以正常工作。

谢谢!

1 个答案:

答案 0 :(得分:1)

我想出来了,以为我会分享答案。

对SetVisibleRows的调用需要在Page的OnLoadComplete事件上进行。尝试在控件加载之前设置行可见性将不起作用。

感谢蒂姆,感谢您的回复。