我在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。这是链接:
答案 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 --%>