读书人

疑难算法有关问题遍历全部控件

发布时间: 2013-08-11 22:22:29 作者: rapoo

疑难算法问题,遍历全部控件


public void SetReadOnly()
{
foreach (Control c in this.Page.Controls)
{
foreach (Control cc in c.Controls)
{
if (cc is HtmlTableRow)
{
foreach (Control ccc in cc.Controls)
{
if (cc is TextBox)
{
if ((cc as TextBox).ReadOnly == true)
{
(cc as TextBox).ReadOnly = false;
(cc as TextBox).Attributes.Add("readonly", "readonly");
}
}
}


}
if (cc is TextBox)
{
if ((cc as TextBox).ReadOnly == true)
{
(cc as TextBox).ReadOnly = false;
(cc as TextBox).Attributes.Add("readonly", "readonly");
}
}
}
}
}



就出在HtmlTable这里,如果往下我不确定还有多少类似的Table控件时如何遍历。例如有一个TR标签加了runat="Server",在这个TR标签下又有一个Table.因为这样遍历是以控件为单位的,因此如果在Table或以下TR,TD便签添加了服务器runat server就会停止这层以下的遍历 算法 控件遍历 ?树结构
[解决办法]
要改成递归的写法。


public void SetReadOnly(Control p)
{
foreach (Control cc in p.Controls)
{
if (cc is TextBox)


{
if ((cc as TextBox).ReadOnly == true)
{
(cc as TextBox).ReadOnly = false;
(cc as TextBox).Attributes.Add("readonly", "readonly");
}
}
else
{
SetReadOnly(cc);
}
}
}

读书人网 >asp.net

热点推荐