2013-09-17 2 views
3

Как определить элементы управления из кода при переключении режимов в FormView? Похоже, вы не можете использовать FindControl во время события Page_Load, так как он будет искать элементы управления в ранее показанном шаблоне, а не только что выбранном. Я подозреваю, что вы не можете полагаться только на страницу PageLoad, но вам нужно найти элементы управления в другом событии, например OnDataBound, но должны ли вы действительно это сделать? Я видел несколько formviews в мой день, что отсутствие таких событий, как OnDataBound ...FindControl ищет элементы управления в некорректном шаблоне FormView

Более подробную информацию о моем конкретном случае: У меня FormView где и ItemTemplate, InsertItemTemplate и EditItemTemplate содержат один и тот же текстовое поле , (у него одинаковый идентификатор во всех шаблонах)

Во время события Page_Load я использую FindControl для поиска текстового поля и изменения его видимости. Прекрасно работает при первоначальной загрузке формы, но по какой-то причине она не работает, когда форма меняет режимы/меняет шаблоны (после отображения страницы вы видите, что видимость текстового поля неверна)

Например, переключение от режима чтения до редактирования - formview.Mode будет установлен в FormViewMode.Edit, но при использовании FindControl во время события PageLoad он будет искать элементы управления в ItemTemplate, а не в EditItemTemplate. Таким образом, если у вас есть элемент управления с тем же идентификатором во всех шаблонах, он найдет элемент управления в некорректном шаблоне, а после загрузки страницы вы будете очень смущены тем, почему элемент управления, который загружен, не имеет того же свойства, как вы думали, когда вы исследовали его в отладчике во время pageLoad.

ответ

5

Не используйте Page_Load для связывания или получить доступ к FormView, вместо того, чтобы использовать FormView «s DataBound событие и CurrentMode property:

protected void FormView1_DataBound(object sender, System.EventArgs e) 
{ 
    if(FormView1.CurrentMode == FormViewMode.ReadOnly) 
    { 
     // here you can safely access the FormView's ItemTemplate and it's controls via FindControl 
    } 
    else if(FormView1.CurrentMode == FormViewMode.Edit) 
    { 
     // here you can safely access the FormView's EditItemTemplate and it's controls via FindControl 
    } 
    else if(FormView1.CurrentMode == FormViewMode.Insert) 
    { 
     // here you can safely access the FormView's InsertItemTemplate and it's controls via FindControl 
    } 
} 
Смежные вопросы