ASP Repeater - 不重复来自xPath的数据

时间:2012-08-29 05:28:41

标签: c# asp.net xpath

我有一个XML数据源,它提供转发器控件。但是,我在解决实际数据时遇到了一些问题。

XML DataSource包含材料厚度列表(取自较大的XML文件),以及价格,尺寸和尺寸数据:

<Thickness>
  <Thick>
    <Size label="Thickness: 12"><![CDATA[12]]></Size>
    <Price>5778</Price>
    <From>0</From>
    <To>0</To>
  </Thick>
  <Thick>
    <Size label="Thickness: 22"><![CDATA[22]]></Size>
    <Price>5919</Price>
    <From>0</From>
    <To>0</To>
  </Thick>
  ...
</Thickness>

我使用以下代码加载DataSource:

myThickness.XPath = "/Item[@label='" + tvwMaterials.SelectedNode.Text + "']/Thickness/*";
myThickness.DataBind();

(其他XPath的东西只是为了获得厚度的东西)。然后我尝试将其加载到转发器(它是数据绑定到XML DataSource)并使用以下代码显示它:

<ItemTemplate>
    <table>
        <tr>
            <td><asp:Label ID="lblThickness" runat="server" Text="Thickness: " />
            <asp:TextBox ID="txtThickness" runat="server" Text='<%# XPath("Thick/Size") %>' />
        </tr><tr>
            <td><asp:Label ID="Label2" runat="server" Text="From: " />
            <asp:TextBox ID="TextBox1" runat="server" Text='<%# XPath("Thick/From") %>' />

         /tr>
    </table>
</ItemTemplate>

这正确加载了控件的数量,但控件不显示任何数据。如果我将加载事件中的xPAth更改为:

myThickness.XPath = "/Item[@label='" + tvwMaterials.SelectedNode.Text + "']/Thickness";

然后控件会显示数据,但仅适用于第一个记录(12和0)。我对xPAth不太熟悉,但还没有找出需要与否的厚度/ *,如果是,那么我将如何在转发器中协调xPAth以读出值。有人有任何指示吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

像这样加载:

myThickness.XPath = "/Item[@label='" + tvwMaterials.SelectedNode.Text + "']/Thickness/Thick";
myThickness.DataBind();

您的数据源路径必须引用xml文档中的重复元素。

<ItemTemplate>
    <table>
        <tr>
            <td><asp:Label ID="lblThickness" runat="server" Text="Thickness: " />
            <asp:TextBox ID="txtThickness" runat="server" Text='<%# XPath("Size") %>' />
        </tr><tr>
            <td><asp:Label ID="Label2" runat="server" Text="From: " />
            <asp:TextBox ID="TextBox1" runat="server" Text='<%# XPath("From") %>' />

         /tr>
    </table>
</ItemTemplate>
相关问题