1

我正在学习 Web 表单,并且正在尝试转换我一直在构建的订单表单。我了解了 XmlDataSource 来获取我的 XML 文件,并了解了 Repeater 来构建模板来呈现数据,而且一切都很好。

首先是我的 XML 如何工作的示例,然后是问题:

<items>
    <item id="sheet-1">
        <name>Sheet the First</name>
        <price id="single" />
    </item>

    <item id="sheet-2">
        <name>Sheet the Second</name>
        <price id="double" />
    </item>
</items>

<costs>
    <cost id="single">.10</cost>
    <cost id="double">.20</cost>
    <cost id="triple">.30</cost>
</costs>

通过我的预 Web 表单设置,我创建了一个foreach循环来将所有成本 ID 和值存储在一个数组中,然后当我遍历每个项目时,我将价格 ID 与成本 ID 匹配,然后输出相应的值。

我想在中继器中创建相同的效果。我怎么在脑海中看到它是这样的......

<p class="cost-line">
<%#XPath("../../costs/cost[@id='XPath("price/@id")']") %>
</p>

但我知道这种语法不太可能奏效。

我不完全确定如何措辞这个问题。我相信我想要做的是将外键与 XPath 和中继器一起使用。这可能吗?如果没有,有什么替代方法可以到达我想去的地方?

4

1 回答 1

1

假设您正在使用 XDocument 并且您以这种方式绑定:

yourRepeater.DataSource = yourXDocument.Root.Element("items").Elements("item").ToList();
yourRepeater.DataBind();

你可以有一个 getCost 方法:

protected String getCost(XElement xel) 
  {
   return xel
            .Parent
            .Parent
            .Element("costs")
            .Elements("cost")
            .Where(x=>x.Attribute("id").Value==xel.Element("price").Attribute("id").Value)
            .First().Value;
  }

然后尝试这样的事情:

 <p class="cost-line">
    <%#this.getCost((XElement)Container.DataItem) %>
 </p>

希望这会有所帮助

于 2012-10-25T07:38:08.097 回答