错误"父键和子键相同"使用单个表作为嵌套中继器的父表和子表

时间:2014-07-15 17:09:36

标签: c# asp.net sql parent-child repeater

我正在使用外部和内部中继器。第一个列出"公司名称"。第二个列表"任务"为该公司完成。对于每个公司,有许多任务。这是我第一次使用嵌套中继器。

问题是,我正在使用一个表(" 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

1 个答案:

答案 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()

*将解决方案从问题转移到答案