从更新面板添加控件到控件集合

时间:2013-03-31 18:02:44

标签: asp.net user-controls updatepanel controlcollection

遵循以下两个主题: 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更新面板中的所有控件。但我不知道如何将它添加到我的控件集合中。

3 个答案:

答案 0 :(得分:0)

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

正如在问题中链接的其他问题中所指出的那样,递归地遍历子控制树是最好的方法。然后,当您找到需要添加控件的位置时,请在该位置调用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);