GridView 三层嵌套,借鉴了网上的两层的代码,然后自己加工了一下,数据库用的是Northwind。 实现效果: Code: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Microsoft.Practices.EnterpriseLibrary.Common; using Microsoft.Practices.EnterpriseLibrary.Data; using System.Data.Common; using System.IO; public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { demo(); } } private void demo() { string sql = "select top 10 * from dbo.Customers"; Database db = DatabaseFactory.CreateDatabase(); DbCommand dcmd = db.GetSqlStringCommand(sql); DataSet ds = db.ExecuteDataSet(dcmd); this.GridView2.DataSource = ds.Tables[0]; this.GridView2.DataBind(); } protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e) { Database dbgv = DatabaseFactory.CreateDatabase(); GridViewRow row = e.Row; string strSort = string.Empty; if (row.DataItem == null) { return; } GridView gv = new GridView(); GridView gv4 = new GridView(); gv = (GridView)row.FindControl("GridView3"); if (e.Row.RowType == DataControlRowType.DataRow) { string datakey = this.GridView2.DataKeys[e.Row.RowIndex].Value.ToString(); string sql = "select top 10 * from dbo.Orders where CustomerID='" + datakey + "'"; DbCommand dcmdgv = dbgv.GetSqlStringCommand(sql); DataSet ds = dbgv.ExecuteDataSet(dcmdgv); gv.DataSource = ds.Tables[0]; gv.DataBind(); } } protected void GridView3_RowDataBound(object sender, GridViewRowEventArgs e) { if(e.Row.RowType == DataControlRowType.DataRow) { if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate) { GridViewRow row = e.Row; GridView gv4 = new GridView(); GridView gv3 = new GridView(); GridView gvBrand = e.Row.Parent.Parent as GridView; string datakey = gvBrand.DataKeys[e.Row.RowIndex].Value.ToString(); gv4 = (GridView)row.FindControl("GridView4"); Database dbgv = DatabaseFactory.CreateDatabase(); DbCommand dcmd_dg4 = dbgv.GetSqlStringCommand("select * from dbo.[Order Details] where OrderID='"+datakey+" '"); DataSet ds2 = dbgv.ExecuteDataSet(dcmd_dg4); gv4.DataSource = dbgv.ExecuteDataSet(dcmd_dg4).Tables[0]; gv4.DataBind(); } } } } <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableEventValidation="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>GridView应用</title> <mce:style media=print><!-- .Noprint{display:none;} .PageNext{page-break-after: always;} --></mce:style><style media=print mce_bogus="1">.Noprint{display:none;} .PageNext{page-break-after: always;}</style> <mce:script language=javascript type="text/javascript"><!-- function expandcollapse(obj,row) { var div = document.getElementById(obj); var img = document.getElementById('img' + obj); if (div.style.display == "none") { div.style.display = "block"; if (row == 'alt') { img.src = "minus.gif"; } else { img.src = "minus.gif"; } } else { div.style.display = "none"; if (row == 'alt') { img.src = "plus.gif"; } else { img.src = "plus.gif"; } } } // --></mce:script> </head> <body> <mce:script language="javascript" type="text/javascript"><!-- // --></mce:script> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView2" runat="server" BackColor="White" BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" CellPadding="4" Width="100%" AutoGenerateColumns="False" DataKeyNames="CustomerID" OnRowDataBound="GridView2_RowDataBound"> <RowStyle BackColor="White" ForeColor="#003399" /> <FooterStyle BackColor="#99CCCC" ForeColor="#003399" /> <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" /> <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" /> <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" /> <Columns> <asp:TemplateField> <ItemTemplate> <a href="javascript:expandcollapse('div<%# Eval(" mce_href="javascript:expandcollapse('div<%# Eval("CustomerID") %>', 'one');"> <img src="plus.gif" mce_src="plus.gif" id="imgdiv<%# Eval("CustomerID") %>"/> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="CompanyName" HeaderText="CompanyName" /> <asp:BoundField DataField="ContactName" HeaderText="ContactName" /> <asp:BoundField DataField="Address" HeaderText="Address" /> <asp:BoundField DataField="Country" HeaderText="Country" /> <asp:TemplateField> <ItemTemplate> <tr> <td colspan="100%"> <div id="div<%# Eval("CustomerID") %>" style="display:none;position:relative;left:15px;OVERFLOW: auto;WIDTH:97%" > <asp:GridView ID="GridView3" AllowPaging="True" AllowSorting="true" BackColor="White" Width=100% Font-Size=X-Small AutoGenerateColumns=false Font-Names="Verdana" runat="server" DataKeyNames="OrderID" ShowFooter=true GridLines=None OnRowDataBound="GridView3_RowDataBound" BorderStyle=Double BorderColor="#0083C1"> <RowStyle BackColor="Gainsboro" /> <AlternatingRowStyle BackColor="White" /> <HeaderStyle BackColor="#0083C1" ForeColor="White"/> <FooterStyle BackColor="White" /> <Columns> <asp:TemplateField > <ItemTemplate> <a href="javascript:expandcollapse('div<%# Eval(" mce_href="javascript:expandcollapse('div<%# Eval("OrderID") %>', 'one');"> <img src="plus.gif" mce_src="plus.gif" id="imgdiv<%# Eval("OrderID") %>"/> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Order ID" > <ItemTemplate> <asp:Label ID="lblOrderID" Text='<%# Eval("CustomerID") %>' runat="server">ada</asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Freight"> <ItemTemplate><%# Eval("Freight")%></ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Shipper Name" > <ItemTemplate><%# Eval("ShipName")%></ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Ship Address" > <ItemTemplate><%# Eval("ShipAddress")%></ItemTemplate> </asp:TemplateField> <asp:TemplateField > <ItemTemplate> <tr> <td> <div id="div<%# Eval("OrderID") %>" style="display:none;position:relative;left:15px;OVERFLOW: auto;WIDTH:97%" > <asp:GridView ID="GridView4" AllowPaging="True" AllowSorting="true" BackColor="White" Width=100% Font-Size=X-Small AutoGenerateColumns=false Font-Names="Verdana" runat="server" DataKeyNames="OrderID" ShowFooter=true GridLines=None BorderStyle=Double BorderColor="#0083C1"> <RowStyle BackColor="Gainsboro" /> <AlternatingRowStyle BackColor="White" /> <HeaderStyle BackColor="#0083C1" ForeColor="White"/> <FooterStyle BackColor="White" /> <Columns> <asp:TemplateField HeaderText="Order ID" SortExpression="OrderID"> <ItemTemplate> <asp:Label ID="lblOrderID" Text='<%# Eval("OrderID") %>' runat="server"></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="ProductID" > <ItemTemplate><%# Eval("ProductID")%></ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Quantitye" SortExpression="ShipName"> <ItemTemplate><%# Eval("Quantity")%></ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="Discount"> <ItemTemplate><%# Eval("Discount")%></ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </td> </tr> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html>