1
我需要枚举一组控件 - 不管它们的嵌套级别如何 - 匹配给定的谓词。查找与谓词相匹配的所有ASP.NET控件?
最初出现问题,当我需要将网格行中的所有文本框设置为ReadOnly
时,如果该行中的列表示该记录不应该可编辑。
后来我意识到,我已经解决了过去很像这个问题,只用不同的标准(通过它的ID递归地查找单个控件)。
尝试了几个选择后,我想出了一个通用的解决方案。但由于我经常使用这种方法,我想收集可能的改进。
此方法将返回匹配的谓语所有子控件:
public static IEnumerable<T> FindChildControls<T>(this Control parentControl,
Predicate<Control> predicate) where T : Control
{
foreach (Control item in parentControl.Controls) {
if (predicate(item))
yield return (T)item;
foreach (T child in item.FindChildControls<T>(predicate)) {
yield return child;
}
}
}
使用这种方法,我可以做到以下几点:
var allTxt = Page.FindChildControls<TextBox>(c => c is TextBox);
var submit = Page.FindChildControls<Button>(c => c.ID == "btnSubmit").First();
我更喜欢你的版本!整洁的解决方案。 – 2009-08-05 20:08:19