2010-02-17 37 views
9

如何在asp.net中的另一個控件之前動態插入控件。可以說,control1是網頁上的一些控件,我想在control1之前動態創建並插入一個表。在另一個控件之前插入控件

例如

table1 = new Table(); 
table1.ID = "Table1"; 

但接下來會發生什麼?要添加一個控件作爲一個孩子,我會這樣做:control1.Controls.Add(table1);但我如何插入table1作爲control1的前一個兄弟?

回答

16

如果你想在新的控制(controlB)立即controlA之前,你可以決定的controlAPage.Controls集合中的指數,並在該位置插入controlB。我相信這會使controlA前進一個索引,使他們根據需要立即兄弟姐妹。

if(Page.Controls.IndexOf(controlA) >= 0) 
    Page.Controls.AddAt(Page.Controls.IndexOf(controlA), controlB); 

編輯:

一個進一步的說明 - 在上述假定控制A和B是在根頁面級。你也可以使用Parent屬性,以確保同級插入工作無論身在何處controlA坐落在頁面層次結構:

Control parent = controlA.Parent; 

if(parent != null && parent.Controls.IndexOf(controlA) >= 0) 
{ 
    parent.Controls.AddAt(parent.Controls.IndexOf(controlA), controlB); 
} 

其實我喜歡這種方法,因爲它更靈活,不依賴於Page

+0

謝謝,最有幫助。 – 2010-02-17 14:59:04

+2

您會在哪種情況下致電此事?因爲我總是得到在DataBind,Init,Load,PreRender或Unload階段無法修改控件集合。 – 2013-05-06 20:25:59

0

你試過control1.Controls.AddAt(0, table1)?有點奇怪,他們沒有像大多數其他收集類型一樣調用Insert方法。

+0

是不是control1.Controls是control1的子控件? 我需要在control1之前插入相同的級別。 – 2010-02-17 14:48:39

+0

哎呀!對不起,我誤解了。看起來你已經找到了解決方案。 – 2010-02-17 15:27:57

相關問題