ASP.net技巧:DataList、Gridview主从表明细显示_C
图1.使用DataList显示主从表明细 
 ASP.net技巧:DataList、Gridview主从表明细显示_休闲_02
图2.使用Gridview显示主从表明细
 
数据库为SQL Server实例数据库Northwind,实现按照订单编号,统计显示出订单详情。
          一构建Northwind库中Orders订单表以及Order Details订单详细表在DataSet中的表关系:
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03 public class DataAccess
{
    public DataSet Tablerelation()
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03        {
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                string strCon = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                //构建连接
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                SqlConnection con = new SqlConnection(strCon);
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03            
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                //多个表来源于相同数据库我们可以讲sql语句一起书写,但需要注意的是,必须在语句间用空格隔开
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                SqlDataAdapter da = new SqlDataAdapter("select    * from orders    select * from [order details]",con);
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                DataSet ds = new DataSet();
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                da.Fill(ds);
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                //我们也可以修改默认生成的(Table、Table1、……)表名
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                ds.Tables [0].TableName="orders";
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                ds.Tables[1].TableName = "orderDetails";
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                //找到两个表中相关联的列
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                DataColumn father = ds.Tables["orders"].Columns["OrderID"];
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                DataColumn son = ds.Tables["orderDetails"].Columns["OrderID"];
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                //给两个列,建立名为tablerelation的关系
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                DataRelation r = new DataRelation("tablerelation", father, son);
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                //将表关系添加到数据集中
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                ds.Relations.Add(r);
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                return ds;
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03        }
}
wef.config中的连接字符串为:
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03<connectionStrings>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03  <add name="NorthwindConnectionString" connectionString="Data Source=.;Initial Catalog=Northwind;Integrated Security=True" providerName="System.Data.SqlClient"/>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03  </connectionStrings>
接下来我们来布置控件的界面:
一DataList:
    给DataList1的项中添加一个一行二列的表,第一个单元格中绑定订单编号,第二个单元格中再加入一个DataList2作为此订单编号的订单详细,在DataList2的项中添加一个一行四列的表,单元格中绑定订单详细表中的字段名。给DataList1的头模版中加入一个一行五列的表,分别写入图片所示的列说明,布局源码如下:
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03    <asp:DataList ID="DataList1" runat="server" BackColor="White"    
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3"    
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        GridLines="Both">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <ItemStyle ForeColor="#000066" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <SelectedItemStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <HeaderTemplate>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                <table class="style1" >
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                        <tr>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                <td width="70">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        订单编号</td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                <td width="70">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        商品编号</td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                <td width="70">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        单价</td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                <td width="70">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        数量</td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                <td width="70">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        折扣</td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                        </tr>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                </table>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        </HeaderTemplate>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <FooterStyle BackColor="White" ForeColor="#000066" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <ItemTemplate>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                <table class="style1">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                        <tr>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                <td width="70">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        <%#Eval("OrderID") %></td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                <td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        <asp:DataList ID="DataList2" runat="server"    
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                DataSource ='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("tablerelation") %>'    
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                Width ="100%" BackColor="White" BorderColor="#CC9966" BorderStyle="None"    
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                BorderWidth="1px" CellPadding="4" GridLines="Both">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                <ItemTemplate>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                        <table class="style1">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                <tr>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                        <td width="70">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                             <%#Eval("productID") %></td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                        <td width="70">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                             <%#Eval("Unitprice") %></td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                        <td width="70">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                                 <%#Eval("Quantity") %></td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                        <td width="70">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                             <%#Eval("Discount") %></td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                </tr>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                        </table>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                </ItemTemplate>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                <ItemStyle BackColor="White" ForeColor="#330099" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                <SelectedItemStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                <HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="#FFFFCC" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        </asp:DataList>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                </td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                        </tr>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                </table>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        </ItemTemplate>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                </asp:DataList>
    其中用×××背景加粗显示的为DataList2的数据源将是根据该项中的订单编号,在表关系名“tablerelation”中找到对应的订单详情,创建一个视图。
     DataList1的数据源将绑定我们以及构建好的DataSet,代码如下:
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03    protected void Page_Load(object sender, EventArgs e)
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03        {
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                if (!IsPostBack)
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                {
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                    
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        Bind();
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                }
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03        }
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03        //绑定控件显示
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03        void Bind()
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03        {
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                DataAccess da = new DataAccess();
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                DataSet ds = da.Tablerelation();
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                DataList1.DataSource = ds.Tables[0];
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                DataList1.DataBind();
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                GridView2.DataSource = ds.Tables[0];
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                GridView2.DataBind();
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03        }
二、使用Gridview的方式类似,首先将Gridview2的自动生成列AutoGenerateColumns="False"改为false,然后在Gridview2手动加入自定义项TemplateField中编辑模版,加入二行一列的表格,第一行绑定订单编号,第二行加入Gridview3,用于显示订单明细,自动生成列AutoGenerateColumns="False"改为false,加入自定义绑定的四个项目,如 <asp:BoundField DataField="productID" HeaderText="商品编号" />,源码如下:
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03 <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False"    
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        CellPadding="4" ForeColor="#333333" GridLines="None" >
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <Columns>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                <asp:TemplateField>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                        <ItemTemplate>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                <table class="style1">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        <tr>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                <td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                     订单编号:    <%#Eval("OrderID") %></td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        </tr>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        <tr>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                <td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                        <asp:GridView ID="GridView3" runat="server"     DataSource ='<%# ((System.Data.DataRowView)Container.DataItem).CreateChildView("order") %>' DataMember="orderID" AutoGenerateColumns="False">
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                         <Columns>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                            
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                <asp:BoundField DataField="productID" HeaderText="商品编号" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                                <asp:BoundField DataField="Unitprice" HeaderText="商品单价" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                                <asp:BoundField DataField="Quantity" HeaderText="商品数量" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                                <asp:BoundField DataField="Discount" HeaderText="折扣" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                </Columns>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                                
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                        </asp:GridView>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                        
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                                </td>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                        </tr>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                                </table>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                        </ItemTemplate>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                                </asp:TemplateField>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        </Columns>
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <EditRowStyle BackColor="#999999" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
 ASP.net技巧:DataList、Gridview主从表明细显示_职场_03                </asp:GridView>
Gridview3的数据源的绑定方式如上原理。