从代码隐藏中查找FormView中的控件时出现问题

时间:2009-06-24 15:39:31

标签: asp.net vb.net formview findcontrol pageload

这里的代码背后......我正在尝试检索此控件,以便我可以将项添加到下拉列表中(我正在检索角色组以添加到代码隐藏中的下拉列表中)< / p>

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子中并且控件尚未实际加载的事实有关?

谢谢,
马特

2 个答案:

答案 0 :(得分:3)

您的下拉列表仅存在于插入模式中。尝试实现formview的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中处理此问题,因为表单尚未切换到插入模式。

答案 1 :(得分:1)

窗体视图上的FindControl仅适用于FormView的“CurrentMode”属性设置为的模板。

在您的情况下,如果您的FormView设置为“Insert”,则只能为“DDRoleGroups”执行FindControl,因为这是您的控件所在的模板。

希望有所帮助。