原文参看 利用Repeater控件显示主-从关系数据表
有的网友在问怎样显示子表的前N条记录,下面是我的做法:
C#
aspx文件:
```
...@ Page language="c#" Codebehind="WebForm13.aspx.cs" AutoEventWireup="false" Inherits="test1.WebForm13"
1 ```
2...@ Import Namespace="System.Data"



1<html>
2  <head>
3  <title>WebForm13</title>
4  <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"/>
5  <meta content="C#" name="CODE_LANGUAGE"/>
6  <meta content="JavaScript" name="vs_defaultClientScript"/>
7  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"/>
8  </head>
9  <body ms_positioning="GridLayout">
10  <form id="Form1" method="post" runat="server">
11  <!-- 父Repeater开始 -->
12  <asp:repeater id="parentRepeater" runat="server">
13  <itemtemplate>
14  <b>
15  ```
16...# DataBinder.Eval(Container.DataItem,"au_id")
 </b>
 <br/>
 <!-- 子Repeater开始 -->
 <asp:repeater datasource="```
getrow((DataRowView)Container.DataItem,1)
1  <itemtemplate>
2  ```
3...# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")
 <br/>
 </itemtemplate>
 </asp:repeater>
 <!-- 子Repeater结束 -->
 </itemtemplate>
 </asp:repeater>
 <!-- 父Repeater结束 -->
 </form>
 </body>
</html>
1
2 cs文件:
3
4
5
6 using System;
7 using System.Collections;
8 using System.ComponentModel;
9 using System.Data;
10 using System.Drawing;
11 using System.Web;
12 using System.Web.SessionState;
13 using System.Web.UI;
14 using System.Web.UI.WebControls;
15 using System.Web.UI.HtmlControls;
16 using System.Data.SqlClient;
17 
18 namespace test1
19 ...{
20  /**////
 /// WebForm13 的摘要说明。
 ///
```
 public class WebForm13 : System.Web.UI.Page
 ...{
 protected System.Web.UI.WebControls.Repeater parentRepeater;

 private void Page_Load(object sender, System.EventArgs e)
 ...{
 // 在此处放置用户代码以初始化页面
 string cnnString = @"server=(local);database=pubs;uid=sa;pwd=sa";
 SqlConnection cnn = new SqlConnection(cnnString);
 SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors",cnn);

 //创建填充 DataSet.
 DataSet ds = new DataSet();
 cmd1.Fill(ds,"authors");

 // 为Titles表创建 DataAdapter
 SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor",cnn);
 cmd2.Fill(ds,"titles");

 // 创建 Authors 表和 Titles 表之间的关系.
 ds.Relations.Add("myrelation",
 ds.Tables["authors"].Columns["au_id"],
 ds.Tables["titles"].Columns["au_id"]);

 // 绑定Authors到父Repeater
 parentRepeater.DataSource = ds.Tables["authors"];
 Page.DataBind();

 cnn.Close();
 cnn.Dispose();

 }

 Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码
 override protected void OnInit(EventArgs e)
 ...{
 //
 // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
 //
 InitializeComponent();
 base.OnInit(e);
 }

 /**////
```
 /// 设计器支持所需的方法 - 不要使用代码编辑器修改
 /// 此方法的内容。
 ///
```
 private void InitializeComponent()
 ...{
 //this.parentRepeater.DataBinding += new System.EventHandler(this.parentRepeater_DataBinding);
 this.Load += new System.EventHandler(this.Page_Load);

 }
 #endregion

 protected DataRow[] getrow(DataRowView drv,int num)
 ...{
 DataRow[] dr=drv.Row.GetChildRows("myrelation");

 if(dr.Length>num)
 ...{
 DataRow[] drtemp=new DataRow[num];
 for(int i=0;i<num;i++)
 ...{
 drtemp[i]=dr[i];
 }
 return drtemp;
 }
 else
 return drv.Row.GetChildRows("myrelation");
 }
 }
}
