我正在开发一个.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。
任何有关这方面的帮助都会受到赞赏,因为这会让我感到沮丧。我有另一个实现界面的控件,它可以正常工作。
谢谢!
答案 0 :(得分:1)
我想出来了,以为我会分享答案。
对SetVisibleRows的调用需要在Page的OnLoadComplete事件上进行。尝试在控件加载之前设置行可见性将不起作用。
感谢蒂姆,感谢您的回复。