用两个Repeater实现关联数据的格式输出

博客提及数据库中有两个关联表,给出了一种格式示例。对于在ConsoleApplication中该格式的实现未详细说明,重点探讨了在WEB页的实现方法,可通过两个Repeater实现,还提到要在aspx文件顶部加入特定导入语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比如数据库里有两个关联的表,要实现以下的格式:

=======================
A
A1 A2 A3 A4 A5
B
B1 B2 B3 B4
C
C1 C2 C3 C4
......
......
=======================

如果是ConsoleApplication可以用下面的代码实现

SqlConnection Conn = new SqlConnection("server=.;uid=sa;pwd=chengbo;database=northwind;");
SqlDataAdapter daOrders 
= new SqlDataAdapter("SELECT OrderID FROM Orders", Conn);
SqlDataAdapter daOrderDetails 
= new SqlDataAdapter("SELECT OrderID, UnitPrice, Quantity FROM [Order Details]", Conn);
DataSet ds 
= new DataSet();
DataTable dtOrders 
= ds.Tables.Add("Orders");
DataTable dtOrderDetails 
= ds.Tables.Add("OrderDetails");

Conn.Open();
daOrders.Fill(dtOrders);
daOrderDetails.Fill(dtOrderDetails);
Conn.Close();
ds.Relations.Add(
"OrdersAndDetails", dtOrders.Columns["OrderID"], dtOrderDetails.Columns["OrderID"]);

foreach(DataRow drParent in dtOrders.Rows)
{
    Console.WriteLine(drParent[
"OrderID"]);
    
foreach(DataRow drChild in drParent.GetChildRows("OrdersAndDetails"))
    
{
        Console.WriteLine(
"{0} {1}/t", drChild["UnitPrice"], drChild["Quantity"]);
    }

}

但是WEB页怎么办呢?可以用两个Repeater实现

.aspx
<asp:repeater id="parentRepeater" runat="server">
    
<headertemplate>
        
<table width="100%" border="0" cellpadding="0" cellspacing="0">
    
</headertemplate>
    
<itemtemplate>
        
<tr>
<td bgcolor="#8c6979" height="30" style="PADDING-LEFT: 15px; FONT-SIZE: 12px; COLOR: #ffffff">
    
<%# DataBinder.Eval(Container.DataItem,"OrderID"%>
</td>
        
</tr>
        
<tr>
<td height="1"></td>
        
</tr>
        
<tr>
<td bgcolor="#c9a9b8" style="PADDING:5PX; ">
    
<asp:repeater id="childRepeater" runat="server" datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("OrdersAndDetails") %>'>
        
<itemtemplate><%# DataBinder.Eval(Container.DataItem,"[/"UnitPrice/"]"%> - <%# DataBinder.Eval(Container.DataItem,"[/"Quantity/"]"%> ]</itemtemplate>
    
</asp:repeater><br>
</td>
        
</tr>
        
<tr>
<td height="1"></td>
        
</tr>
    
</itemtemplate>
    
<footertemplate>
        
</table>
    
</footertemplate>
</asp:repeater>
.aspx.cs
SqlConnection Conn 
= new SqlConnection("server=.;uid=sa;pwd=chengbo;database=northwind;");
SqlDataAdapter daOrders 
= new SqlDataAdapter("SELECT OrderID FROM Orders", Conn);
SqlDataAdapter daOrderDetails 
= new SqlDataAdapter("SELECT OrderID, UnitPrice, Quantity FROM [Order Details]", Conn);
DataSet ds 
= new DataSet();
DataTable dtOrders 
= ds.Tables.Add("Orders");
DataTable dtOrderDetails 
= ds.Tables.Add("OrderDetails");

Conn.Open();
daOrders.Fill(dtOrders);
daOrderDetails.Fill(dtOrderDetails);
Conn.Close();
//添加Relation
ds.Relations.Add("OrdersAndDetails", dtOrders.Columns["OrderID"], dtOrderDetails.Columns["OrderID"]);

this.parentRepeater.DataSource = dtOrders;
//调用Page类的DataBind方法,隐式调用两个Repeater对象实例的DataBind方法
this.Page.DataBind();

记住要在aspx文件顶部上加入
<%@ Import Namespace="System.Data" %>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值