Multiview中的Findcontrol嵌套在Formview中

时间:2014-01-02 14:03:17

标签: c# asp.net

我在formview中有一个多视图:

 <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
   <asp:UpdatePanel ID="UpdatePanel1" runat="server">
     <ContentTemplate>
         <asp:FormView ID="fvSpec" runat="server" DataKeyNames="ID" OnItemUpdating="fvSpec_ItemUpdating"
            OnItemInserting="fvSpec_ItemInserting" OnModeChanging="fvSpec_ModeChanging">
            <EditItemTemplate>
               <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0">
                   <asp:View ID="View1" runat="server">
                       <asp:DropDownList ID="ddlEditProdType" runat="server" SelectedValue='<%# Bind("CommonID") %>'></asp:DropDownList>

切换到编辑模式时,需要绑定下拉列表:

    protected void fvSpec_ModeChanging(object sender, FormViewModeEventArgs e)
    {
        int tableID = int.Parse(ddlItems.SelectedValue);
        switch (e.NewMode)
        {
            case FormViewMode.Edit:
                fvSpec.ChangeMode(FormViewMode.Edit);
                FillEditLists();                   
                BindFormView(tableID);
        }
     }

    private void FillEditLists()
    {
        MultiView MultiView1 = (MultiView)fvSpec.FindControl("MultiView1");
        View View1 = (View)MultiView1.FindControl("View1");

        //ddlEditProdType COMES BACK NULL
        DropDownList ddlEditProdType = (DropDownList)View1.FindControl("ddlEditProdType"); 
        //bind ddl here          
    }

发现formview控件很好 发现多视图控件很好 发现视图控件很好 但是当执行下拉列表行时,它会返回NULL (对象引用错误)

赞赏任何意见。

2 个答案:

答案 0 :(得分:0)

你有没有试过这样的事情:

private Control FindControlRecursive(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = FindControlRecursive(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
} 

来自this CodingHorror article。我有点惊讶我们在.NET 4.0上,微软还没有构建这样的东西......我经常使用它。

答案 1 :(得分:0)

找出为什么找不到控件 需要首先绑定formview,然后找到某个控件。

                BindFormView(tableID);
                FillEditLists();