Frage

Ich stecke bei einem Problem fest.Ich denke, ich bin wahrscheinlich nahe an der Lösung, komme aber scheinbar nicht dorthin.Ich habe ein XMLDoc, das von einem gespeicherten Proc in einen Datensatz geladen wird und aus dem die XML-Datei abgerufen wird (ich glaube nicht, dass ich irgendetwas an diesem Teil ändern kann).Das XML sieht so aus:

<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>

Ich muss verschachtelte Repeater verwenden, um diese Informationen anzuzeigen.Ich möchte es nach dem „Gruppen“-Knoten gruppieren und dann jeden der „Datenknoten“ anzeigen, die zu diesem „Gruppen“-Knoten gehören.Auf der Seite würde es also etwa so aussehen:

G1 - has 2 nodes
11 - Val1
12 - Val2

G2 - has 3 nodes
21 - Val1
22 - Val2
23 - Val3

etc

Was ich bisher habe: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>

Default.aspx.cs

public partial class _Default : System.Web.UI.Page
{
    private XmlNodeList nodelist;

    protected void Page_Load(object sender, EventArgs e)
    {
        XmlDocument doc = new XmlDocument();
        doc.Load(@"C:\development\testforWork\WebApplication1\WebApplication1\data.xml");

        nodelist = doc.SelectNodes("//datanode[not(group=preceding-sibling::datanode/group)]/group");           
        //nodelist = doc.SelectNodes("//datanode[group='G2']");

        Repeater1.DataSource = nodelist;
        Repeater1.DataBind();
    }
}

Ich kann sie dazu bringen, einfach jeden Datenknoten nacheinander anzuzeigen, aber ich kann nicht herausfinden, wie ich die Repeater verschachteln und die Gruppierung vornehmen soll.Ich bin ein Neuling in Sachen XPath und Repeater und denke, dass ich eine Wissenslücke habe und die Zusammenhänge einfach nicht verstehen kann (es sei denn, ich bin völlig auf dem falschen Weg).

Danke

War es hilfreich?

Lösung

OK, also habe ich nach einigem Experimentieren meine Lösung gefunden:

<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>

Ich hoffe, das hilft in Zukunft jemand anderem (oder mir, wenn ich es wieder vergesse).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top