如何在页面加载中的ListView中查找控件

时间:2014-08-21 18:49:15

标签: c# asp.net listview

我试图在页面加载中找到listview中的formview。但是,我的结果始终为null。我先调用了DataBind方法,但仍然没有。

背后的代码

protected void Page_Load(object sender, EventArgs e)
    {
            String list = itemdropdownlist.SelectedValue;

            switch (list)
            {
                case "Section Item":
                    SectionListView.DataBind();
                    //SectionListView.Enabled = false;
                    var temp = (FormView)SectionListView.FindControl("SectionFormView");
                    temp.Enabled = true;
                    renderView(SectionListView, "hidden"); // hide listview on page load
                    break;
            }
 }

ASP.net代码

<InsertItemTemplate>
                        <tr style="">
                            <td>
                                <div style="font-size: .8em;">
                                    <asp:FormView ID="SectionFormView" runat="server" DataKeyNames="SectionItemID" DataSourceID="SectionDataSource">
                                        <ItemTemplate>
                                            <asp:Button ID="InsertButton" runat="server" Text="Insert" OnClick="SectionItemButton_Click" Font-Size="1.2em" />
                                            <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Clear" Font-Size="1.2em" />
                                            <asp:Label ID="SectionItemLabel" runat="server" Text="SectionItem" Font-Bold="true" Font-Size="1.2em" />
                                            <asp:TextBox ID="SectionItemTextBox" runat="server" />
                                            <asp:Label ID="SectionItemSubLabel" runat="server" Text="SectionItem Label" Font-Bold="true" Font-Size="1.2em" />
                                            <asp:TextBox ID="SectionItemLabelTextBox" runat="server" />

                                        </ItemTemplate>
                                    </asp:FormView>
                                </div>
                            </td>
                        </tr>
                    </InsertItemTemplate>
                    <ItemTemplate>

2 个答案:

答案 0 :(得分:0)

你遇到了这个错误,因为列表视图还没有绑定,所以我认为最好的方法是在 ItemDataBound 事件上完成所有这些操作。您会发现 FormView ,如:

 if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        FormView  SFormView= (FormView)e.Item.FindControl("SectionFormView");
        if (SFormView!= null)
        {
            //code here
        }
    }

答案 1 :(得分:0)

您可以使用此代码查找任何内容。之前我用它来查找我在后面的代码中创建的文字。使用此代码查找FormView

      private readonly List<FormView> _foundControls = new List<FormView>();
        public IEnumerable<FormView> FoundControls
        {
            get { return _foundControls; }
        }

        public void FindChildControlsRecursive(Control control)
        {
            foreach (Control childControl in control.Controls)
            {
                if (childControl.GetType() == typeof(FormView))
                {
                    _foundControls.Add((FormView)childControl);
                }
                else
                {
                    FindChildControlsRecursive(childControl);
                }
            }
        }


 FindChildControlsRecursive(<Insert relevent Code Here: Whatever element you want to search inside of like your listView, find that using FindControl>);
            FormView[] strControl = new FormView[200];
            strControl = FoundControls.ToArray();

            foreach (FormView i in strControl)
            {
                if (i.ID.Equals("< insert controlId of your FormView>"))
                {
                    // do something when you find it
                }

            }