Проблема с поиском элемента управления в FormView из кода программной части

Вот код позади ... Я пытаюсь получить этот элемент управления, чтобы добавить элементы в раскрывающийся список (я извлекаю группы ролей, чтобы добавить их в раскрывающийся список в коде программной части)

Protected Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim DDRoleGroups As DropDownList
    DDRoleGroups = FormView1.FindControl("DDRoleGroup")
End Sub

Вот FormView: (я убрал большинство полей, чтобы их было легче читать)

<asp:FormView ID="FormView1" runat="server" DataKeyNames="ID" 
     DataSourceID="ObjectDataSource_Vendors" 
     DefaultMode="Insert" BorderColor="DarkGray" 
     BorderStyle="Solid" BorderWidth="1px" CellPadding="4" Visible="False"> 
  <EditItemTemplate> 
  </EditItemTemplate> 
  <InsertItemTemplate>                          
    <label class="form_label">Role Group:</label><br /><asp:DropDownList ID="DDRoleGroup" 
               runat="server" Width="175px"
               EnableViewState="False"> 
              </asp:DropDownList>
   </InsertItemTemplate>
</asp:FormView>

Может ли это быть связано с тем, что он находится в подпрограмме Page_Load, а элемент управления еще не загружен?

Спасибо,
Мэтт


person Matt    schedule 24.06.2009    source источник


Ответы (2)


Выпадающий список существует только в режиме вставки. Попробуйте реализовать событие ModeChanged формы просмотра и получить элемент управления, если CurrentMode == Insert:

protected void FormView1_ModeChanged(object sender, EventArgs e)
{
    if (FormView1.CurrentMode == FormViewMode.Insert)
    {
        DropDownList DDRoleGroups = FormView1.FindControl("DDRoleGroup");
        // fill dropdown
    }
}

Вы не можете справиться с этим в Page_Load, поскольку форма еще не переключилась в режим вставки.

person devio    schedule 18.07.2009

FindControl в представлении формы будет работать только для шаблона, для которого установлено свойство «CurrentMode» FormView.

В вашем случае вы можете использовать FindControl для «DDRoleGroups» только в том случае, если для вашего FormView установлено значение «Insert», поскольку это шаблон, в котором существует ваш элемент управления.

Надеюсь, это поможет.

person womp    schedule 24.06.2009
comment
DefaultMode = Insert ‹- Разве это не то же самое, что CurrentMode = Insert? - person Matt; 24.06.2009
comment
Не совсем. DefaultMode - это то, к чему возвращается formview после любой операции вставки / обновления / удаления. CurrentMode показывает, в каком режиме сейчас находится FV. Я не видел, чтобы вы уже установили DefaultMode. Если он установлен на Insert и вы убедились, что он действительно находится на Insert во время Page_Load, значит, происходит что-то еще. - person womp; 24.06.2009
comment
Сделал то, что вы предложили, и даже инкапсулировал FindControl в If ViewForm1.CurrentMode.Equals (Insert) Then. Он определенно попал в If, поэтому я не уверен, почему он не работал ... - person Matt; 24.06.2009
comment
Вы можете попробовать FormView.Row.FindControl (DDRoleGroup)? - person womp; 24.06.2009
comment
О, и вам может потребоваться сделать это в PreRender () ... проверьте здесь: msdn.microsoft.com/en-us/library/ - person womp; 24.06.2009