与えられた述語に一致するコントロールの集合(ネストレベルに関係なく)を列挙する必要があります。述語に一致するすべての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();
あなたのバージョンはかなり似ています。きちんとした解決策。 –