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

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

=======================
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" %>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值