2013-03-31 154 views
1

添加控件來控制集合繼這兩個線程: 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不具有添加或插入方法。爲什麼我發佈的第一個鏈接允許該用戶添加到他的收藏中。這是我想要做的,找到我的upForm更新面板中的所有控件。但我沒有看到我可以如何將它添加到我的控件集合中。

回答

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[] currentControlsInUpdatePanel = new Control[((UpdatePanel)upForm).ContentTemplateContainer.Controls.Count]; 
for(int i = 0; i < upForm.Controls.Count; i++) 
{ 
    currentControlsInUpdatePanel[i] = ((UpdatePanel)upForm).ContentTemplateContainer.Controls[i]; 
} 
0

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

正如問題中提到的其他問題所指出的那樣,遞歸地行走子控制樹是最好的方法。然後,當您找到需要添加控件的位置時,請在該位置撥打Controls.Add()

我的建議將是一種不同的方法:在UpdatePanel中放置一個<asp:PlaceHolder>控件,並給它一個名稱併爲其添加控件。訪問UpdatePanel本身的控件集合應該沒有什麼特別的優勢,那麼您就不必深入瞭解控件的實現細節(雖然它們不太可能發生變化,但會使代碼更加難以閱讀) 。

0

嘗試使用

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

這使您控制集合中的所有控件。從那裏,你可以使用CopyTo用於將其複製到陣列您需要:

Control[] controls = new Control[collection.Length]; 
collection.CopyTo(controls , 0);