1

遵循这两个线程: 如何在 C#.NET 中创建控件数组? 无法访问 UpdatePanel 中的控件

我目前有这个:

ControlCollection[] currentControlsInUpdatePanel = new ControlCollection[upForm.Controls.Count];
foreach (Control ctl in ((UpdatePanel)upForm).ContentTemplateContainer.Controls)
{
    currentControlsInUpdatePanel.
}

currentControlsInUpdatePanel 没有添加或插入方法。为什么我发布的第一个链接允许该用户添加到他的收藏中。这就是我想做的,在我的 upForm 更新面板中找到所有控件。但我不知道如何将其添加到我的控件集合中。

4

3 回答 3

0

UpdatePanel子控件集合是一个特殊的集合,它只包含一个子控件:它的模板容器。然后控件包含 的所有子控件UpdatePanel(例如 aGridViewButton)。

正如在与问题相关的其他问题中指出的那样,递归地遍历子控制树是最好的方法。然后,当您找到需要添加控件的位置时,请Controls.Add()在该位置调用。

我的建议是另一种方法:<asp:PlaceHolder>在 中放置一个控件UpdatePanel并为其命名并为其添加控件。访问自身的控件集合应该没有特别的优势UpdatePanel,然后您就不必深入研究控件的实现细节(虽然它们不太可能改变,但会使代码更难阅读)。

于 2013-03-31T18:12:53.340 回答
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];
}
于 2013-03-31T18:14:25.903 回答
0

尝试使用

ControlCollection collection = ((UpdatePanel)upForm).ContentTemplateContainer.Controls;

这为您提供了该控件集合中的所有控件。从那里您可以使用 CopyTo 将其复制到您需要的数组中:

Control[] controls = new Control[collection.Length];
collection.CopyTo(controls , 0);
于 2013-03-31T18:14:48.923 回答