如何在中继器内对xml数据进行排序/反转

本文关键字:排序 反转 数据 xml 中继器 | 更新日期: 2024-07-10 18:16:35

我一直在尝试如何简单地反转从xml中获得的数据/按日期排序,或者我是否可以在中继器中这样做,中继器会在页面上呈现这些数据。

这就是我所拥有的:

页面只需读取一个xml。。。

if (!Page.IsPostBack)
        {
            DataSet messages = new DataSet();
            try
            {
                messages.ReadXml(MapPath("~/_xml/messages.xml"));
                myMessages.DataSource = messages;
                myMessages.DataBind();
            }

并将日期放入数据集中。

在页面上,中继器渲染数据。。。

<asp:Repeater ID="myMessages" runat="server">
                <HeaderTemplate>
                    <table border="0">
                </HeaderTemplate>
                <ItemTemplate>
                    <div class="message">
                        <div class="messageHeader">
                            <span><p><b><%# DataBinder.Eval(Container.DataItem, "name") %></b> wrote <%# DataBinder.Eval(Container.DataItem, "date") %>:</p></span>
                        </div>
                        <div class="splitLine"></div>
                        <br />
                        <div class="messageText">
                            <span><p><%# DataBinder.Eval(Container.DataItem, "message") %></p></span>
                        </div>
                    </div>
                </ItemTemplate>
                <FooterTemplate>
                    </Table>
                </FooterTemplate>
            </asp:Repeater>

也许也可以按不同的顺序写入数据,比如不将新条目放在文件的末尾,而是将它们放在开头。但我认为这并不是一个真正的解决方案。

这就是我将数据写入xml的方式:

var file = Server.MapPath("~/_xml/messages.xml");
var message = new XElement("contact",
new XElement("Name", s_name.Trim()),
new XElement("message", s_message.Trim()),
new XElement("date", DateTime.Now.ToString()));
var doc = new XDocument();
if (ckeckFileExistance(file))
{
     doc = XDocument.Load(file);
     doc.Element("messages").Add(message);
}
else
{
     doc = new XDocument(new XElement("messages", message));
}
doc.Save(file);

这是一个快速而小的项目。它应该是尽可能简单的。再说一遍。我想做的是使最新条目出现在页面顶部现在它们出现在底部。提前感谢!

如何在中继器内对xml数据进行排序/反转

XDocument messages = XDocument.Load(MapPath("~/_xml/messages.xml"));
myMessages.DataSource = 
    messages.Elements("messages")
    .Elements("contact")
    .OrderByDescending(m => DateTime.Parse(m.Element("date").Value))
myMessages.DataBind();

并将中继器绑定更改为

<%# DataBinder.Eval(((XElement)Container.DataItem).Element("date"), "Value")%>

etc