我一直试图找出如何简单地反转我从xml获得的数据/按日期订购它,或者我是否可以使用转发器来实现这一点,转发器会在页面上呈现它们。
所以这就是我所拥有的:
只需页面就会读取xml ...
if (!Page.IsPostBack)
{
DataSet messages = new DataSet();
try
{
messages.ReadXml(MapPath("~/_xml/messages.xml"));
myMessages.DataSource = messages;
myMessages.DataBind();
}
...并将日期放在DataSet中。
在页面上,转发器呈现数据 ...
<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);
这是一个快速而小的项目。它应该尽可能简单。然后再次。我想要做的是使最新的条目显示在页面顶部。 现在它们出现在底部。 提前谢谢!
答案 0 :(得分:1)
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")%>
等