问题从代码隐藏一个FormView内找到一个控制(Problem finding a control

2019-09-16 21:59发布

这后面的代码...我想检索该控制,所以我可以将项目添加到下拉列表(我检索角色组添加到下拉列表中的代码隐藏)

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子和控制还没有acctually还装做?

谢谢,
马特

Answer 1:

你的下拉菜单只存在于插入模式。 尝试实施FormView的ModeChanged事件和检索如果CURRENTMODE ==插入控制:

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

你不能在Page_Load中处理这个问题,因为形式尚未切换到插入模式。



Answer 2:

上的FindControl一个FormView将只用于FormView的“CURRENTMODE”属性设置为模板的工作。

你的情况,你只能为“DDRoleGroups”做的FindControl如果你的FormView控件设置为“插入”,因为这是你的控制中存在的模板。

希望帮助。



文章来源: Problem finding a control within a FormView from code-behind