【问题标题】:How do I search for a GridView located in a user control from a parent page?如何从父页面搜索位于用户控件中的 GridView?
【发布时间】:2012-04-21 09:58:55
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    2. 无需遍历子控件列表 - 查看 FindControl。假设创建时为网格分配了“MyGrid”的 ID,并且用户控件被命名为 MyUserControl... 在回发时定位网格(假设处理了上面第一个中的视图状态问题) - 您可以简单地使用: grid = MyUserControl.FindControl("MyGrid")

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

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

    【讨论】:

    • 这是我的代码...我找不到...是的,我在 Init 上加载了占位符函数,我在回发时看到了我的网格 ....
    • 返回 0rows DataTable questionResp = new DataTable();字符串问题标签 = String.Empty; foreach(在 phReqForm.Controls 中控制 ctrl){ foreach(在 ctrl.Controls 中控制 ctrlChild){if(ctrlChild 是 ASP.dynamiccontrolfr_ascx){ UserControl uc = new UserControl(); uc = (UserControl)Page.LoadControl("DynamicControlFR.ascx"); GridView gv = ((GridView)uc.FindControl("gvFR"));字符串测试 = gv.Rows.Count.ToString(); questionResp.Rows.Add(test, test, questionLabel, test); }}}
    【解决方案2】:

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

    通过这种方式,我能够找到动态添加的控制值。 只需要提供您要查找的控件 ID。 这里我的面板 id 是 plnall,文本框 id 是 txt_idcplacehld 是内容占位符 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;
    

    【讨论】:

    • 嗨 Ivan Karajas,我能收到你的电子邮件吗,因为由于字符限制,我无法在此处粘贴我的代码...我可以在电子邮件中向您解释我的场景以及我想要做什么...
    • 我无法粘贴完整的代码,但我的 gridview 位于用户控件内部,并且我的应用程序中有许多用户控件。根据某些条件,我将用户控件绑定到网页上的占位符.我想在按下我网页上的保存按钮时从用户控件的网格视图中保存数据。所以我需要检索我的gridview行的所有值并保存它们......但我找不到我的网格。我可以找到类似 ASP.dynamicControl_ascx 之类的东西,这是我的用户控件的名称,没有下划线和前缀 asp ......这非常令人沮丧......请帮助
    猜你喜欢
    • 1970-01-01
    • 2013-11-09
    • 2015-04-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2013-11-29
    • 2016-07-01
    • 1970-01-01
    相关资源
    最近更新 更多