嵌套GridView实现客户订单详情显示

在本文中,将探讨如何在ASP.NET中使用嵌套GridView来展示客户和其订单的详细信息。将使用Northwind数据库,并实现一个主GridView来展示客户的ContactName和City,然后为每个客户创建一个子GridView来展示其OrderID和OrderDate。

快速开始

首先,需要创建一个主GridView来展示客户信息。在主GridView中,将展示客户的ContactName和City。然后,将为每个客户添加一个展开/收起的图标,当点击这个图标时,将显示对应的子GridView,展示客户的订单详情。

在主GridView中,将使用TemplateField来添加一个展开/收起的图标。同时,将为每个客户创建一个唯一的Div,用于放置子GridView。

以下是主GridView的HTML代码:

<asp:GridView ID="grdViewCustomers" runat="server" AutoGenerateColumns="false" DataKeyNames="CustomerID" OnRowDataBound="grdViewCustomers_OnRowDataBound" CssClass="Grid"> <Columns> <asp:TemplateField ItemStyle-Width="20px"> <ItemTemplate> <a href="javascript:divexpandcollapse('div<%# Eval("CustomerID") %>')"> <img id="imgdiv<%# Eval("CustomerID") %>" alt="Details" src="images/plus.png" /> </a> <div id="div<%# Eval("CustomerID") %>" style="display: none;"> <asp:GridView ID="grdViewOrdersOfCustomer" runat="server" AutoGenerateColumns="false" DataKeyNames="CustomerID" CssClass="ChildGrid"> <Columns> <asp:BoundField ItemStyle-Width="150px" DataField="OrderID" HeaderText="Order ID" /> <asp:BoundField ItemStyle-Width="150px" DataField="OrderDate" HeaderText="Order Date" /> </Columns> </asp:GridView> </div> </ItemTemplate> </asp:TemplateField> <asp:BoundField ItemStyle-Width="150px" DataField="ContactName" HeaderText="Contact Name" /> <asp:BoundField ItemStyle-Width="150px" DataField="City" HeaderText="City" /> </Columns> </asp:GridView>

在上述代码中,使用了TemplateField来添加一个展开/收起的图标,并为每个客户创建了一个唯一的Div,用于放置子GridView。

接下来,需要实现展开/收起功能。当点击展开图标时,将显示对应的子GridView;当点击收起图标时,将隐藏对应的子GridView。

以下是实现展开/收起功能的JavaScript代码:

function divexpandcollapse(divname) { var img = "img" + divname; if ($("#" + img).attr("src") == "images/plus.png") { $("#" + img).closest("tr").after($("#" + divname).html()); $("#" + img).attr("src", "images/minus.png"); } else { $("#" + img).closest("tr").next().remove(); $("#" + img).attr("src", "images/plus.png"); } }

在上述代码中,使用了jQuery来实现展开/收起功能。当点击展开图标时,将显示对应的子GridView;当点击收起图标时,将隐藏对应的子GridView。

最后,需要在主GridView的OnRowDataBound事件中填充子GridView。

以下是填充子GridView的C#代码:

protected void Page_Load(object sender, EventArgs e) { grdViewCustomers.DataSource = SelectData("SELECT top 3 CustomerID, ContactName, City FROM Customers"); grdViewCustomers.DataBind(); } private DataTable SelectData(string sqlQuery) { string connectionString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SQLServerConnectionString"].ConnectionString; using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlQuery, connectionString)) { DataTable dt = new DataTable("Customers"); sqlDataAdapter.Fill(dt); return dt; } } protected void grdViewCustomers_OnRowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { string customerID = grdViewCustomers.DataKeys[e.Row.RowIndex].Value.ToString(); GridView grdViewOrdersOfCustomer = (GridView)e.Row.FindControl("grdViewOrdersOfCustomer"); grdViewOrdersOfCustomer.DataSource = SelectData("SELECT top 3 CustomerID, OrderID, OrderDate FROM Orders WHERE CustomerID='" + customerID + "'"); grdViewOrdersOfCustomer.DataBind(); } }

在上述代码中,在主GridView的OnRowDataBound事件中填充子GridView。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485