Comment réaliser le document inversé ordonné xmldatasource dans ListView?
-
28-10-2019 - |
Question
J'utilise un asp:XmlDataSource
Pour répertorier un document XML. Cela ressemble à ceci:
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/Xml/History.xml" />
Et je l'utilise dans un asp:Listview
comme ça:
<asp:ListView runat="server" DataSourceID="XmlDataSource1" >
Je me demandais s'il y avait un moyen d'inverser la commande, car Je voudrais le dernière ligne du xml pour être le première Row dans ma liste. Comment puis-je atteindre cet objectif?
La solution
Si votre XML ressemblait à ceci (par exemple):
<myxml>
<row id="1">
<row id="2">
</myxml>
Ensuite, vous pouvez faire une transformation en ligne avec quelque chose comme ceci:
<asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/App_Data/Xml/History.xml">
<Transform>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*">
<myxml>
<xsl:for-each select="//row">
<xsl:sort select="@id" order="descending" />
<xsl:copy-of select="row"/>
</xsl:for-each>
</myxml>
</xsl:template>
</xsl:stylesheet>
</Transform>
</asp:XmlDataSource>
J'espère que cela pourra aider :)
Autres conseils
Vous pouvez simplement remplir une liste, l'inverser, puis vous lier à cette liste.
Edit: il est difficile de donner un exemple, car cela dépendra totalement de votre fichier XML, mais l'idée de base est ci-dessous, où vous modifieriez l'instruction SELECT comme requis et peut-être en ajouter des instructions selon les besoins.
XDocument XDoc = XDocument.Load(XMLFileName);
ListView.DataSource = (from XMLNode in XDoc.Nodes()
select XMLNode.ToString()).ToList().Reverse();
ListView.DataBind();