Repeater控件显示主-从关系数据表的方法。

Posted on 2004-11-09 17:32  生活即技术  阅读(428)  评论(0编辑  收藏  举报
前提条件是两个数据表必须满足约束条件。即一个表定义主键,在另一个表中定义外键。如下
 user用户表 user_name是主键
id user_name  sex  age
1   A                1     25
2   B                 0     23
3   C                1      22
sale  表         user_name是外键
id  user_name   products
1     A                  "p"
2     A                  "t"
3     B                  "a"
4     C                  "e"
建立DataRelation 
 
   Dim DS As DataSet
        
Dim MyConnection As System.Data.SqlClient.SqlConnection
        
Dim MyCommand As System.Data.SqlClient.SqlDataAdapter
        MyConnection 
= New System.Data.SqlClient.SqlConnection("server=(local);database=Achem56;uid=tiantian;pwd=tiantian;")
        MyCommand 
= New System.Data.SqlClient.SqlDataAdapter("select  * from A  order by id asc", MyConnection)
        DS 
= New DataSet
        MyCommand.Fill(DS, 
"A")
        
Dim Mycommand1 As New System.Data.SqlClient.SqlDataAdapter("select   * from B ", MyConnection)
        Mycommand1.Fill(DS, 
"B")
        DS.Relations.Add(
"myrelation", DS.Tables("A").Columns("USER_NAME"), DS.Tables("B").Columns("USER_NAME"))
        Me.Repeater1.DataSource 
= DS.Tables("A")
        Page.DataBind()
注意建立ds.Relations.add("myrelation",Da.Tables("A").columns("user_name"),Ds.Tables("B").Columns("User_name"))的顺序
Me.Repeater1.DataSource=DS.Tables("A") 是通过父表访问子表。用Me.Repeater1.DataSource=Ds.Tables("B")来访问父表也是可以的.
在页面上显示:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="DataRepeater.aspx.vb" Inherits="application.DataRepeater"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
    
<HEAD>
        
<title>DataRepeater</title>
        
<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
        
<meta name="CODE_LANGUAGE" content="Visual Basic .NET 7.1">
        
<meta name="vs_defaultClientScript" content="JavaScript">
        
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    
</HEAD>
    
<body MS_POSITIONING="GridLayout">
        
<form id="Form1" method="post" runat="server">
           
<FONT face="宋体">
           
<asp:Repeater  id="Repeater1" runat="server">
           
<HeaderTemplate>
           
<table width=60%  align=center bgcolor=#0000cc >
           
</HeaderTemplate>
           
<ItemTemplate>
            
<Tr bgcolor="#ffffff"><td><%# DataBinder.Eval(Container.DataItem,"id") %> </td><td><%#DataBinder.Eval(Container.Dataitem,"user_name")%> </td></Tr>
             
<asp:Repeater ID="Repeater2"  DataSource='<%#(Container.DataItem).Row.GetChildRows("myrelation") %>'  Runat="server" >
              <ItemTemplate>
           
<tr bgcolor="#ffffff"> <td>Products: <%#(Container.dataitem("products"))%></td><td></td></tr>
              
</ItemTemplate>
             
</asp:Repeater>
            
</ItemTemplate>    
           
<FooterTemplate ></table></FooterTemplate>    
           
</asp:Repeater></FONT>
        
</form>
    
</body>
</HTML>
应用的地方,比如你有repeater做一个数据循环,同时也要根据父表中的数据在访问子表,显示子表也用循环的情况下要用到它。
实际的例子比如。汽车
而汽车下有,卡车、小汽车等