该关系不是此 DataView 指向的表的父级

问题描述 投票:0回答:3
<BusinessList>
  <Company>
    <CompanyName>StackOverflow</CompanyName>
    <Desc>FAQ Q & A Site</Desc>
    <Email>[email protected]</Email>
    <Mobile>123456</Mobile>
    <Phone>123456</Phone>
    <City>florida</City>
    <ZipCode>620020</ZipCode>
    <Country>USA</Country>
    <State>FL</State>
    <Image>a.png</Image>
  </Company>
  <Staff>
    <FirstName>A</FirstName>
    <Qualification>Bachelor in Engineering</Qualification>
    <Stories>Highly enthusiastic and energetic programmer will surely work with him again - Jane</Stories>
    <Designation>Chief Engineer</Designation>
    <Email>[email protected]</Email>
    <ContactNo>123456</ContactNo>
    <Fax>56565656</Fax>
    <Image>1.png</Image>
  </Staff>
  <Staff>
    <FirstName>B</FirstName>
    <Qualification>Bachelor in Engineering</Qualification>
    <Stories>Highly enthusiastic and energetic programmer will surely work with him again - Jane</Stories>
    <Designation>Team Leader</Designation>
    <Email>[email protected]</Email>
    <ContactNo>123456</ContactNo>
    <Fax>5757575</Fax>
    <Image>2.png</Image>
  </Staff>
  <Staff>
    <FirstName>C</FirstName>
    <Qualification>Bachelor in Engineering</Qualification>
    <Stories>Highly enthusiastic and energetic programmer will surely work with him again - Jane</Stories>
    <Designation>Programmer</Designation>
    <Email>[email protected]</Email>
    <ContactNo>123456</ContactNo>
    <Fax>565656</Fax>
    <Image>3.png</Image>
  </Staff>
  <Staff>
    <FirstName>D</FirstName>
    <Qualification>Bachelor in Engineering</Qualification>
    <Stories>Highly enthusiastic and energetic programmer will surely work with him again - Jane</Stories>
    <Designation>Developer</Designation>
    <Email>[email protected]</Email>
    <ContactNo>123456</ContactNo>
    <Fax>1231231234</Fax>
    <Image>4.png</Image>
  </Staff>
</BusinessList>

上面是我的数据集的 xml 输入文件,我使用

DataSet.ReadXml()
方法读取该文件。但是,当我使用如下所示的嵌套转发器进行数据绑定时,出现错误。

                        <asp:Repeater runat="server" id="rptrCompany">
                            <HeaderTemplate>
                                Staff in company
                            </HeaderTemplate>
                            <ItemTemplate>
                                Company Details:
                                <%# Eval("CompanyName") %>
                                .. blahblahblah Staff Details
                                <asp:Repeater runat="server" id="rptrStaff" datasource='<%# ((DataRowView)Container.DataItem).CreateChildView("BusinessList_Staff") %>'>
                                    <HeaderTemplate>
                                        Staff List
                                    </HeaderTemplate>
                                    <ItemTemplate>
                                        <%# Eval("FirstName") %>
                                        ..blah blah blah
                                    </ItemTemplate>
                                </asp:Repeater>
                            </ItemTemplate>
                        </asp:Repeater>

blah blah blah 部分表示我数据绑定的额外字段。在子中继器中,我收到错误/异常

The relation is not parented to the table to which this DataView points.
我做错了什么,当我检查数据集时,关系名称“BusinessList_Staff”存在[关系是由框架自动为我创建的]。另外
Container.Dataitem
是一个
datarowview
,它也有在标记中使用的“CreateChildView”方法。我所做的就是在后端 pageLoad 中 DataBind 父中继器,如下所示
rptrCompany.DataSource = dtTemp.Tables["Company"].DefaultView;
 rptrCompany.DataBind();

请让我知道我做错了什么

asp.net data-binding user-controls repeater
3个回答
1
投票

难道是因为员工不是公司的? XML 中可能存在的唯一关系是通过公司后面与公司的隐式关系。

如果您可以控制 XML 生成,则应将

<Staff>
元素更改为包含在
<Company>
中。

很长一段时间没有以这种方式进行数据绑定了,如果这不是一个完整的解决方案,那么很抱歉。


1
投票

我认为问题是因为你的数据集结构是扁平的。这种中继器结构需要有公司实体中的员工名单。 xml 应该如下所示:

<BusinessList>
  <Company>
    <!--Other Properties-->
    <Staffs>
      <!--Staff List-->
      <Staff>
      </Staff>
      <Staff>
      </Staff>
    </Staffs>
  </Company>
</BusinessList>

0
投票

我花了几个小时才弄清楚关系的名称很重要:两个节点名称用下划线分隔。我已经多次读到该关系是自动创建的,所以我不介意。

© www.soinside.com 2019 - 2024. All rights reserved.