2010-02-17 19 views
9

Jak dynamicznie wstawić formant przed innym formantem w asp.net. Powiedzmy, że control1 to pewna kontrola na stronie internetowej i chcę dynamicznie tworzyć i wstawiać tabelę tuż przed control1.Wstawianie formantu przed innym formantem

np.

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

ale co dalej? Aby dodać kontrolkę jako dziecko, zrobiłbym: control1.Controls.Add(table1);, ale jak do cholery wstawić tabelę1 jako poprzednie rodzeństwo kontroli1?

Odpowiedz

16

Jeśli chcesz nowy sterowania (controlB) być bezpośrednio przed controlA, można określić indeks controlA w kolekcji Page.Controls i włóż controlB w tym miejscu. Wierzę, że spowoduje to przesunięcie o controlA w przód o jeden indeks, co spowoduje, że będą one natychmiastowe.

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

Edit:

Jedno dodatkowe Uwaga - powyższe zakłada sterowania A i B są na poziomie strony korzenia. Można również użyć właściwości Parent aby zapewnić wprowadzenie rodzeństwo działa bez względu na to gdzie controlA siedzi w hierarchii strony:

Control parent = controlA.Parent; 

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

bym rzeczywiście wolą tę metodę, ponieważ jest bardziej elastyczna i nie polegać na Page.

+0

Dzięki, najbardziej pomocne. –

+2

W którym przypadku byś to nazwał? Ponieważ zawsze otrzymuję Kolekcja kontrolna nie może być modyfikowana podczas faz DataBind, Init, Load, PreRender lub Unload. –

0

Czy próbowałeś control1.Controls.AddAt(0, table1)? Coś dziwnego, że nie nazywali metody Insert tak jak większość innych typów kolekcji.

+0

Czy nie można kontrolować1.Controls być dzieckiem kontroli formantu1? Muszę wstawić tuż przed control1, na tym samym poziomie. –

+0

Whoops! Przepraszam, źle mnie zrozumiałem. Wygląda na to, że znalazłeś rozwiązanie. –

Powiązane problemy