我正在使用外部和内部中继器。第一个列出"公司名称"。第二个列表"任务"为该公司完成。对于每个公司,有许多任务。这是我第一次使用嵌套中继器。
问题是,我正在使用一个表(" Tracker")。 Column CompanyName来自Table1(" Tracker")和Task一样,我使用的每个例子都使用两个表。创建关系时,我得到错误"父键和子键是相同的"
ds.Relations.Add("myrelation", _
ds.Tables("Tracker").Columns("CompanyName"), _
ds.Tables("Tracker").Columns("CompanyName"))
PRepeater.DataSource = ds.Tables("Tracker")
有解决方法吗?另一种方法呢?除了制作另一个数据库? VB或C#很好。
这是我在btn点击时调用的整个Sub以及aspx部分(如果有帮助的话)。
Protected Sub bindParent()
conn = New System.Data.SqlClient.SqlConnection
conn.ConnectionString = ConfigurationSettings.AppSettings("connString")
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
Dim cmd1 As New SqlDataAdapter("Select * from Tracker", conn)
Dim ds As New DataSet()
cmd1.Fill(ds, "Tracker")
Dim cmd2 As New SqlDataAdapter("Select * from Tracker", conn)
cmd2.Fill(ds, "Tracker")
ds.Relations.Add("myrelation", _
ds.Tables("Tracker").Columns("CompanyName"), _
ds.Tables("Tracker").Columns("CompanyName"))
PRepeater.DataSource = ds.Tables("Tracker")
PRepeater.DataSource = ds.Tables("Tracker")
Page.DataBind()
conn.Close()
End Sub
ASPX
<asp:Panel ID="pnlCompany" runat="server" visible="false"/>
<asp:Repeater ID="PRepeater" runat="server">
<ItemTemplate>
<tr>
<b><%# DataBinder.Eval(Container.DataItem, "CompanyName") %></b>
</tr>
<asp:Repeater ID="childRepeater" runat="server" DataSource='<%# Container.DataItem.Row.GetChildRows("myrelation") %>'>
<ItemTemplate>
<%#Container.DataItem("Task")%><br />
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
*这是我工作的例子 http://support.microsoft.com/default.aspx?scid=kb;EN-US;326338
答案 0 :(得分:0)
解决了这个问题,给了我想要的输出,没有更多的错误信息
Dim cmd1 As New SqlDataAdapter("Select distinct CompanyName from Tracker", conn)
Dim ds As New DataSet()
cmd1.Fill(ds, "Company")
Dim cmd2 As New SqlDataAdapter("Select * from Tracker", conn)
cmd2.Fill(ds, "Tracker")
ds.Relations.Add("myrelation", _
ds.Tables("Company").Columns("CompanyName"), _
ds.Tables("Tracker").Columns("CompanyName"))
PRepeater.DataSource = ds.Tables("Company")
PRepeater.DataBind()
conn.Close()
*将解决方案从问题转移到答案