SQL
1 
2 
3 
4 
5 
6 
7 
SELECT ProductID, ProductName, SupplierID, CategoryID, 
QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder, ReorderLevel, Discontinued, 
(SELECT CategoryName FROM Categories 
WHERE Categories.CategoryID = Products.CategoryID) as CategoryName, 
(SELECT CompanyName FROM Suppliers 
WHERE Suppliers.SupplierID = Products.SupplierID) as SupplierName 
FROM Products 
C#
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
using System; 
using System.Data; 
using NorthwindTableAdapters; 
public partial class 
Northwind 
{ 
public partial class 
SuppliersRow 
{ 
public Northwind.ProductsDataTable GetProducts() 
{ 
ProductsTableAdapter productsAdapter = 
new ProductsTableAdapter(); 
return 
productsAdapter.GetProductsBySupplierID(this.SupplierID); 
} 
} 
} 
C#
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
NorthwindTableAdapters.SuppliersTableAdapter 
suppliersAdapter = new 
NorthwindTableAdapters.SuppliersTableAdapter(); 
// Get all of the suppliers 
Northwind.SuppliersDataTable suppliers = 
suppliersAdapter.GetSuppliers(); 
// Enumerate the suppliers 
foreach (Northwind.SuppliersRow supplier in suppliers) 
{ 
Response.Write("Supplier: " + 
supplier.CompanyName); 
Response.Write("<ul>"); 
// List the products for this supplier 
Northwind.ProductsDataTable products = supplier.GetProducts(); 
foreach (Northwind.ProductsRow product in products) 
Response.Write("<li>" + 
product.ProductName + "</li>"); 
Response.Write("</ul><p> </p>"); 
} 
  我们将在以后的教程里讨论怎样来显示这样的主/从(master-detail)报表。在这里,这个例子的目的是用 来示范如何使用添加到Northwind.SuppliersRow类中的自定义的方法的。
SuppliersAndProducts.aspx
ASP.NET
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
<%@ Page Language="C#" 
AutoEventWireup="true" CodeFile="SuppliersAndProducts.aspx.cs" 
Inherits="SuppliersAndProducts" %> 
<!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>Untitled Page</title> 
<link href="Styles.css" 
rel="stylesheet" 
type="text/css" 
/> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
<h1> 
Suppliers and Their Products</h1> 
<p> 
<asp:GridView ID="GridView1" runat="server" 
AutoGenerateColumns="False" 
CssClass="DataWebControlStyle"> 
<HeaderStyle CssClass="HeaderStyle" /> 
<AlternatingRowStyle CssClass="AlternatingRowStyle" /> 
<Columns> 
<asp:BoundField DataField="CompanyName" 
HeaderText="Supplier" /> 
<asp:TemplateField HeaderText="Products"> 
<ItemTemplate> 
<asp:BulletedList ID="BulletedList1" 
runat="server" DataSource="<%# 
((Northwind.SuppliersRow)((System.Data.DataRowView) 
Container.DataItem).Row).GetProducts() %>" 
DataTextField="ProductName"> 
</asp:BulletedList> 
</ItemTemplate> 
</asp:TemplateField> 
</Columns> 
</asp:GridView> 
 </p> 
</div> 
</form> 
</body> 
</html> 
C#
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
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 NorthwindTableAdapters; 
public partial class 
SuppliersAndProducts : System.Web.UI.Page 
{ 
protected void 
Page_Load(object sender, EventArgs e) 
{ 
SuppliersTableAdapter suppliersAdapter = new 
SuppliersTableAdapter(); 
GridView1.DataSource = suppliersAdapter.GetSuppliers(); 
GridView1.DataBind(); 
} 
}