Asp.net 使用XMLNodeList的嵌套中继器
我被一个问题困住了。我想我可能已经接近解决方案了,但似乎无法实现。我有一个XMLDoc,它从一个存储过程加载到一个数据集中,然后从中提取xml(我想我不能更改这部分的任何内容)。XML如下所示:Asp.net 使用XMLNodeList的嵌套中继器,asp.net,nested-repeater,xmlnodelist,Asp.net,Nested Repeater,Xmlnodelist,我被一个问题困住了。我想我可能已经接近解决方案了,但似乎无法实现。我有一个XMLDoc,它从一个存储过程加载到一个数据集中,然后从中提取xml(我想我不能更改这部分的任何内容)。XML如下所示: <data> <datanode> <name>11</name> <group>G1</group> <value>val1</value> </datanode>
<data>
<datanode>
<name>11</name>
<group>G1</group>
<value>val1</value>
</datanode>
<datanode>
<name>12</name>
<group>G1</group>
<value>val2</value>
</datanode>
<datanode>
<name>21</name>
<group>G2</group>
<value>val1</value>
</datanode>
<datanode>
<name>22</name>
<group>G2</group>
<value>val2</value>
</datanode>
<datanode>
<name>23</name>
<group>G2</group>
<value>val3</value>
</datanode>
<datanode>
<name>31</name>
<group>G3</group>
<value>val1</value>
</datanode>
<datanode>
<name>32</name>
<group>G3</group>
<value>val2</value>
</datanode>
<datanode>
<name>33</name>
<group>G3</group>
<value>val3</value>
</datanode>
<datanode>
<name>34</name>
<group>G3</group>
<value>val4</value>
</datanode>
</data>
到目前为止,我所拥有的:
Default.aspx:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<p>
COUNT: <asp:Literal runat="server" ID="Literal3" Text='<%# XPath("count(group)") %>' />
<br />Text: <asp:Literal runat="server" ID="Literal4" Text='<%# XPath("text()") %>' />
<br />Group: <asp:Literal runat="server" ID="Literal2" Text='<%# XPath("group") %>' />
<br />ID: <asp:Literal runat="server" ID="displayname" Text='<%# XPath("name") %>' />
<br />VAL: <asp:Literal runat="server" ID="Literal1" Text='<%# XPath("value") %>' />
</p>
</ItemTemplate>
</asp:Repeater>
我可以让它们一个接一个地显示每个数据节点,但我不知道如何嵌套中继器并进行分组。我对XPath和Repeater还不太熟悉,我认为我的知识一定有一些差距,只是无法连接点(除非我完全走错了路)
谢谢好的,在进一步试验后找到了我的解决方案:
<asp:Repeater ID="repManifestNumber" runat="server" DataSource="<%# ManifestDataTemp %>">
<ItemTemplate>
Manifest Number:
<%# CurrentManifestNumber = XPath("manifest_number").ToString() %>
- <%# XPath("count(..//box_item[manifest_number=" + CurrentManifestNumber + "])")%> Box(s)
<div class="showhide">
<asp:Repeater ID="repMainfestDetail" runat="server" DataSource='<%# ((XmlNode)Container.DataItem).SelectNodes("..//box_item[manifest_number=" + CurrentManifestNumber + "]") %>'>
<HeaderTemplate>
<table class="orders" id="manifest_<%# CurrentManifestNumber %>">
<tr>
<th>
Box Number
</th>
<th>
Date Dispatched
</th>
<th>
<input type="checkbox" class="checkboxflipflop_local" />
- Select All
</th>
</tr>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<tr class="odd-table-row">
<td>
<asp:Literal runat="server" ID="litBoxNumber" Text='<%# XPath("box_number") %>' />
</td>
<td>
<asp:Literal runat="server" ID="litErpDispatched" Text='<%# Convert.ToDateTime(XPath("date_dispatched")).ToString("dd/MM/yyyy") %>' />
</td>
<td>
<asp:Literal runat="server" ID="litHiddenXmlNode" Text='<%# ((XmlNode)Container.DataItem).OuterXml %>'
Visible="false"></asp:Literal>
<asp:CheckBox ID="chkIsReceived" runat="server" Checked="false" CssClass="storecheckbox" />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
</ItemTemplate>
</asp:Repeater>
舱单编号:
-盒子(s)
箱号
发出日期
-全选
希望这可能会在将来帮助其他人(或者在我再次忘记它时帮助我)。好的,在进一步试验后找到了我的解决方案:
<asp:Repeater ID="repManifestNumber" runat="server" DataSource="<%# ManifestDataTemp %>">
<ItemTemplate>
Manifest Number:
<%# CurrentManifestNumber = XPath("manifest_number").ToString() %>
- <%# XPath("count(..//box_item[manifest_number=" + CurrentManifestNumber + "])")%> Box(s)
<div class="showhide">
<asp:Repeater ID="repMainfestDetail" runat="server" DataSource='<%# ((XmlNode)Container.DataItem).SelectNodes("..//box_item[manifest_number=" + CurrentManifestNumber + "]") %>'>
<HeaderTemplate>
<table class="orders" id="manifest_<%# CurrentManifestNumber %>">
<tr>
<th>
Box Number
</th>
<th>
Date Dispatched
</th>
<th>
<input type="checkbox" class="checkboxflipflop_local" />
- Select All
</th>
</tr>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<tr class="odd-table-row">
<td>
<asp:Literal runat="server" ID="litBoxNumber" Text='<%# XPath("box_number") %>' />
</td>
<td>
<asp:Literal runat="server" ID="litErpDispatched" Text='<%# Convert.ToDateTime(XPath("date_dispatched")).ToString("dd/MM/yyyy") %>' />
</td>
<td>
<asp:Literal runat="server" ID="litHiddenXmlNode" Text='<%# ((XmlNode)Container.DataItem).OuterXml %>'
Visible="false"></asp:Literal>
<asp:CheckBox ID="chkIsReceived" runat="server" Checked="false" CssClass="storecheckbox" />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
</ItemTemplate>
</asp:Repeater>
舱单编号:
-盒子(s)
箱号
发出日期
-全选
希望这可能会在将来帮助其他人(或者在我再次忘记它时帮助我)。行:可以更容易:行:可以更容易:
<asp:Repeater ID="repManifestNumber" runat="server" DataSource="<%# ManifestDataTemp %>">
<ItemTemplate>
Manifest Number:
<%# CurrentManifestNumber = XPath("manifest_number").ToString() %>
- <%# XPath("count(..//box_item[manifest_number=" + CurrentManifestNumber + "])")%> Box(s)
<div class="showhide">
<asp:Repeater ID="repMainfestDetail" runat="server" DataSource='<%# ((XmlNode)Container.DataItem).SelectNodes("..//box_item[manifest_number=" + CurrentManifestNumber + "]") %>'>
<HeaderTemplate>
<table class="orders" id="manifest_<%# CurrentManifestNumber %>">
<tr>
<th>
Box Number
</th>
<th>
Date Dispatched
</th>
<th>
<input type="checkbox" class="checkboxflipflop_local" />
- Select All
</th>
</tr>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</HeaderTemplate>
<ItemTemplate>
<tr class="odd-table-row">
<td>
<asp:Literal runat="server" ID="litBoxNumber" Text='<%# XPath("box_number") %>' />
</td>
<td>
<asp:Literal runat="server" ID="litErpDispatched" Text='<%# Convert.ToDateTime(XPath("date_dispatched")).ToString("dd/MM/yyyy") %>' />
</td>
<td>
<asp:Literal runat="server" ID="litHiddenXmlNode" Text='<%# ((XmlNode)Container.DataItem).OuterXml %>'
Visible="false"></asp:Literal>
<asp:CheckBox ID="chkIsReceived" runat="server" Checked="false" CssClass="storecheckbox" />
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>
</div>
</ItemTemplate>
</asp:Repeater>