如何从父页面搜索位于用户控件中的GridView?

时间:2012-04-21 09:58:56

标签: c# asp.net webforms web-controls

我的网页上有一个占位符,我动态地将用户控件绑定到它。

我尝试遍历占位符中的所有控件并获取控件ID,这是我的用户控件的ID。控件ID基本上是带有下划线的usercontrol的名称;所以,如果我的用户控件的名称是dynamicControl.ascx,那么在我的control.ID中,我得到ASP.dynamicControl_ascx。现在我需要再次加载我的用户控件吗?如果是这样,我该怎么做,如何输入它,以及如何在我的usercontrol中找到gridview?

用户控件是gridview,我需要检索控件内文本框中输入的值。

2 个答案:

答案 0 :(得分:2)

这里需要几个步骤/概念......

  1. 了解页面生命周期并了解WHERE /何时绑定动态组件。通常,这可以通过在Page_Init中进行绑定来实现,以便它们出现在回发视图状态绑定上。如果没有这种考虑,您的网格可能不存在,并且如果存在则大多数总是为空。有时只是将绑定移动到Page_Init是不可能的......在这些情况下,应该在Biding Dynamic Controls上进行谷歌搜索。关于如何解决在回发时返回动态内容的各种方法,有大量示例。

  2. Thre不需要遍历子控件列表 - 查看FindControl。假设网格在创建时被分配了“MyGrid”ID,而用户控件被命名为MyUserControl ...要在回发时找到网格(假设上面的第一个问题中的viewstate问题已经处理) - 您可以简单地使用: grid = MyUserControl.FindControl("MyGrid")

  3. 当然,如果没有返回网格对象,则MyGrid不存在。

    希望这会有所帮助.....

答案 1 :(得分:1)

这会对你有所帮助 http://www.asp.net/web-forms/tutorials/master-pages/control-id-naming-in-content-pages-cs

这样我就能找到动态添加的控制值。 只需要提供你想要找到的控件ID。 我的面板ID为 plnall ,文本框ID为 txt_id cplacehld 为内容占位符ID, ctl00 为主页ID

MasterPage ctl00 = FindControl("ctl00") as MasterPage;

            ContentPlaceHolder cplacehld = ctl00.FindControl("ContentPlaceHolder2") as ContentPlaceHolder;
 Panel panel1 = cplacehld.FindControl("plnall") as Panel;
 TextBox txt = cplacehld.FindControl("txt_id") as TextBox;
                    value = txt.Text;