gpt4 book ai didi

c# - 如何遍历用户控件中的控件找到某个控件?

转载 作者:太空宇宙 更新时间:2023-11-03 11:39:39 24 4
gpt4 key购买 nike

ASP.NET 2.0 网络表单

那么如何遍历用户控件中的所有控件并找到特定类型的控件并向其附加事件?

我有一个类似的问题How do I add a event to an ASP.NET control when the page loads?处理添加一个事件 - 但如果我想找到一个控件,这是不同的。

场景

该控件是自定义控件:

<asp:Repeater runat="server" ID="options" OnItemDataBound="options_OnItemDataBound">
<HeaderTemplate>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
</HeaderTemplate>
<ItemTemplate>
<td>
<span>
<asp:Label runat="server" ID="optionName">
</asp:Label>
<asp:DropDownList runat="server" ID="optionValues" CssClass="PartOption">
</asp:DropDownList>
</span>
</td>
</ItemTemplate>
<FooterTemplate>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>

用户控件上的自定义控件声明:

<td><def:CustomControl id="somePartOptions" runat="server"></td>

在用户控件的隐藏代码中,我在 Page_Load 事件中尝试了以下操作:

    foreach(Control control in partOptions.Controls) {
FindDropDownControl(control);
}

protected void FindDropDownControl(Control controlContainer) {
bool isRepeater = false;
if (controlContainer is Repeater) {
isRepeater = true;
}

if (controlContainer.HasControls()) {
foreach (Control subControl in controlContainer.Controls) {
FindDropDownControl(subControl);
}
}
}

但是, bool 标志始终为假。那我在做什么?我最终想在转发器的 itemTemplate 中找到下拉列表控件,但我什至找不到转发器。

谢谢,

最佳答案

我正在使用此方法获取容器中的控件列表(在每个嵌套级别上):

    public static List<Control> GetControlsByType(Control ctl, Type type)
{
List<Control> controls = new List<Control>();

foreach (Control childCtl in ctl.Controls)
{
if (childCtl.GetType() == type)
{
controls.Add(childCtl);
}

List<Control> childControls = GetControlsByType(childCtl, type);
foreach (Control childControl in childControls)
{
controls.Add(childControl);
}
}

return controls;
}

你可以这样使用 t:

List<Control> repeaters = GetControlsByType(containerControl, typeof (Repeater));

关于c# - 如何遍历用户控件中的控件找到某个控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5112378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com