用两个Repeater实现关联数据的格式输出
2005-10-13 14:57
549 查看
比如数据库里有两个关联的表,要实现以下的格式:=======================
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" %>
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" %>
相关文章推荐
- 用两个Repeater实现关联数据的格式输出
- 请修改append 函数,利用这个函数实现:两个非降序链表的并集,1->2->3 和2->3->5 并为1->2->3->5 另外只能输出结果,不能修改两个链表的数据。
- 使用 Repeater 控件,每隔N条数据输出另外的格式
- 两个Repeater嵌套实现动态菜单(ado.net+sql和xml+Linq两种读取数据方式)
- delphi 用别名的方式访问excel写入数据,实现非标格式报表输出
- shell实现类矩阵格式数据统计及输出(hive环境下数据的过程化处理)
- C#实现任意数据类型转成json格式输出
- python中json格式数据输出的简单实现方法
- python中json格式数据输出的简单实现方法
- python中json格式数据输出实现方式
- 巧用matlab做中继实现excel数据按格式输出到word
- python中json格式数据输出实现方式(无unicode编码输出形式)
- python difflib模块实现两个文件差异对比,并输出html格式。
- 解决WinForm中ComboBox控件的“设置"DataSourse”属性后无法修改项集合”以及两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题
- [ASP] 设置数据的输出格式-使用控件Repeater
- java编程实现对10个整型数据元素输出最小的两个数,java自带的Arrays.sort排序方法,小--->大
- 使用 Repeater 控件,每隔N条数据输出另外的格式
- C/C++语言的点滴(一) -- 实现两个任意类型的数据的交换
- 实现删除主表数据时, 判断与之关联的外键表是否有数据引用, 有标志, 无则删除
- Javascript实现关联数据(Linked Data)查询及注意细节