如何在以下代码中找到嵌套的Asp:GridView?

时间:2009-03-30 19:37:39

标签: c# asp.net gridview

我在aspx页面中有以下结构:

<asp:Panel ID="pnlCust" runat="server">
    <asp:GridView ID="gvMaster" runat="server" 
                  OnRowCreated="gvMaster_RowCreated">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlMaster" runat="server">
                        //...
                    </asp:Panel>
                    <asp:Panel ID="pnlDetails" runat="server">
                        <asp:GridView ID="gvDetails" runat="server">
                            <Columns>
                                //...
                            </Columns>
                        </asp:GridView>
                    </asp:Panel>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
</asp:Panel>

这些面板用于Ajax Control Toolkit中的CollapsiblePanelExtender。

我正在尝试使用FindControl在代码隐藏中查找gvDetails控件,但我的最新尝试没有用,这是在gvMaster_RowCreated事件中:

GridView gv =  
e.Row.FindControl("pnlDetails").FindControl("gvDetails") as GridView;

其中e是GridViewRowEventArgs

我基本上在做这个页面上的内容,但我没有使用SqlDataSource,但是,该人基本上是通过来自RowCreated事件传入的e参数的FindControl查找SqlDataSource。这是链接:

http://mosesofegypt.net/post/2008/02/Building-a-grouping-Grid-with-GridView-and-ASPNET-AJAX-toolkit-CollapsiblePanel.aspx

3 个答案:

答案 0 :(得分:1)

我不相信GridView可以像这样使用子控件。

答案 1 :(得分:1)

这是一个适合我的代码隐藏方法:

protected void gvMaster_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow) {
        GridView gv = (GridView)e.Row.FindControl("gvDetails");
    }
}

您的应用是否会抛出异常?什么不能正常工作?

答案 2 :(得分:0)

您需要将面板放在模板字段中。你可以尝试这样的事情:

<asp:Panel ID="pnlCust" runat="server"> 
    <asp:GridView ID="gvMaster" runat="server" >
        <columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:Panel ID="pnlDetails" runat="server">
                        <asp:GridView ID="gvDtails" runat="server">
                            <columns>
                                <asp:TemplateField>
                                    <ItemTemplate>
                                        <%-- columns here --%>
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </columns>
                        </asp:GridView> <%-- end gvDetails --%>
                    </asp:Panel> <%-- end pnlDetails--%>
                </ItemTemplate>
            </asp:TemplateField>
        </columns>
    </asp:GridView> <%-- end gvMaster --%>
</asp:Panel> <%-- end pnlCust --%>