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