2010-02-17 9 views
9

Как динамически вставить элемент управления перед другим элементом управления в asp.net. Допустим, control1 - это некоторый контроль над веб-страницей, и я хочу динамически создавать и вставлять таблицу непосредственно перед control1.Вставка элемента управления перед другим управлением

например.

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

но что будет дальше? Чтобы добавить элемент управления в качестве дочернего элемента, я бы сделал: control1.Controls.Add(table1);, но как я могу вставить таблицу 1 в качестве предыдущего брата элемента управления1?

ответ

16

Если вы хотите, чтобы новый элемент управления (controlB), чтобы быть непосредственно перед controlA, вы можете определить индекс controlA в Page.Controls коллекции, и вставить controlB в этом месте. Я верю, что это набросит controlA вперед одним индексом, сделав их непосредственными братьями и сестрами по своему усмотрению.

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

Edit:

Еще одно замечание - выше предполагает управление 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

Спасибо, самое полезное. –

+2

В каком случае вы бы назвали это? Потому что я всегда получаю. Коллекция управления не может быть изменена во время фаз DataBind, Init, Load, PreRender или Unload. –

0

Вы попробовали control1.Controls.AddAt(0, table1)? Вроде странного они не называли метод Вставить, как и большинство других типов коллекций.

+0

Не было бы control1.Controls быть дочерними элементами управления control1? Мне нужно вставить только до управления1 на том же уровне. –

+0

Упс! Извините, я неправильно понял. Похоже, вы нашли решение. –

Смежные вопросы