1

私はWebフォームを学んでおり、作成していた注文フォームを変換しようとしています。XMLファイルを調達するためのXmlDataSourceと、データを表示するためのテンプレートを構築するための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とRepeatersで外部キーを使用することだと思います。これは可能ですか?そうでない場合、私が行こうとしている場所に到達するためにどのような選択肢がありますか?

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 に答える