1

现在我在 MSDN 上做了一些关于如何从页面获取控件的研究。 http://msdn.microsoft.com/en-us/library/yt340bh4(v=vs.100).aspx

我已经研究了如何从静态上下文中获取页面引用。 从静态类访问 Page 的当前实例

但是,当我尝试遍历页面控件列表时,它会出现 null 并且没有 gridview。

现在我需要那个gridview,因为我正在将它数据绑定到一个我之前用数据库调用填充的数据表。我在其中执行此操作的静态方法是 WebMethod,因此它看起来像这样:

    [WebMethod(EnableSession = true)]
    [ScriptMethod]
    public static string viewApps(){}

这是我的静态方法中的 C# 代码

            GridView applications = new GridView();
            Page masspage = HttpContext.Current.CurrentHandler as Page;
            foreach(Control childcontrol in masspage.Controls)
            {
                if(childcontrol is GridView){
                    applications = childcontrol as GridView;
                }
            }

            applications.DataSource = dt;
            applications.DataBind();

我以为这很简单,但我想不会这么简单。如果有一种方法可以根据 id 获取对我的 GridView 的引用,那也很有用。

这是我的 asp.net 代码。它是从母版页继承的页面。

 <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Always">
        <ContentTemplate>
             <asp:GridView ID="ApplicationsGridView" runat="server"

                      AutoGenerateColumns="True" >

               <%--Styling and column info omitted --%>

                  </asp:GridView>
           </ContentTemplate>
   </asp:UpdatePanel>
4

1 回答 1

0

这不太对,但是...您的 gridview 控件受到保护。定义一个返回受保护控件的公共属性 GridView MyGrid(只是为了不编辑设计器)。否则你需要递归

foreach(Control childcontrol in masspage.Controls)   
{
    if(childcontrol is GridView)
    {
        applications = childcontrol as GridView;
    }
    else
    {
        // call this function recursively
    }
}
于 2013-11-27T16:46:12.013 回答