遵循以下两个主题: How can I create an Array of Controls in C#.NET? Cannot Access the Controls inside an UpdatePanel
我目前有这个:
ControlCollection[] currentControlsInUpdatePanel = new ControlCollection[upForm.Controls.Count];
foreach (Control ctl in ((UpdatePanel)upForm).ContentTemplateContainer.Controls)
{
currentControlsInUpdatePanel.
}
currentControlsInUpdatePanel没有add或insert方法。为什么我发布的第一个链接允许该用户.add到他的收藏。这就是我想要做的,找到我的upForm更新面板中的所有控件。但我不知道如何将它添加到我的控件集合中。
答案 0 :(得分:0)
UpdatePanel
的子控件集合是一个特殊的集合,它只包含一个子控件:它的模板容器。然后 控件包含UpdatePanel
的所有子控件(例如GridView
或Button
)。
正如在问题中链接的其他问题中所指出的那样,递归地遍历子控制树是最好的方法。然后,当您找到需要添加控件的位置时,请在该位置调用Controls.Add()
。
我的建议是采用不同的方法:在<asp:PlaceHolder>
中添加UpdatePanel
控件,并为其命名并添加控件。访问UpdatePanel
本身的控件集合应该没有特别的优势,然后你不必深入挖掘控件的实现细节(虽然它们不太可能改变,但可以使代码更多很难读。)
答案 1 :(得分:0)
我认为这段代码没有意义。您正在创建一个ControlCollection对象数组,并尝试在其中存储Control对象。此外,由于currentControlsInUpdatePanel对象是一个数组,因此该对象上不会有Add()方法。
如果要使用Add()方法,请尝试将currentControlsInUpdatePanel创建为List对象。
示例:
List<Control> currentControlsInUpdatePanel = new List<Control>();
foreach(Control ctl in ((UpdatePanel)upForm).ContentTemplateContainer.Controls)
{
currentControlsInUpdatePanel.Add(ctl);
}
如果要继续使用数组来存储Control对象,则需要使用索引值来设置数组中的对象。
示例:
Control[] currentControlsInUpdatePanel = new Control[((UpdatePanel)upForm).ContentTemplateContainer.Controls.Count];
for(int i = 0; i < upForm.Controls.Count; i++)
{
currentControlsInUpdatePanel[i] = ((UpdatePanel)upForm).ContentTemplateContainer.Controls[i];
}
答案 2 :(得分:0)
尝试使用
ControlCollection collection = ((UpdatePanel)upForm).ContentTemplateContainer.Controls;
这将为您提供该控件集合中的所有控件。从那里你可以使用CopyTo将它复制到你需要的数组:
Control[] controls = new Control[collection.Length];
collection.CopyTo(controls , 0);