无法按日期排序列表。如何显示按日期排序的数据?
XDocument doc = XDocument.Load(Server.MapPath("file.xml"));
IEnumerable<XElement> items = from item in doc.Descendants("item")
orderby Convert.ToDateTime(item.Attribute("lastChanges").Value) descending
where item.Attribute("x").Value == 1
select item;
Repeater1.DataSource = items;
Repeater1.DataBind();
Xml文件如下所示:
<root>
<items>
<item id="1" lastChanges="15-05-2010" x="0" />
<item id="2" lastChanges="16-05-2010" x="1" />
<item id="3" lastChanges="17-05-2010" x="1" />
</items>
</root>
答案 0 :(得分:1)
我必须进行一些更改才能根据需要编译和排序示例代码:
var formatter = new DateTimeFormatInfo
{
ShortDatePattern = "dd/MM/yyyy"
};
var items = from item in doc.Descendants("item")
orderby Convert.ToDateTime(item.Attribute("lastChanges").Value, formatter) descending
where item.Attribute("x").Value == "1"
select item;
主要是提供一个IFormatProvider,以便系统可以正确解析日期。
输出:
<item id="3" lastChanges="17-05-2010" x="1" />
<item id="2" lastChanges="16-05-2010" x="1" />
如果您将过滤和排序数据的问题分开到可测试的类中,您应该能够验证排序是否正常工作并将问题搜索集中在其他地方。
public class DataSource
{
private readonly XDocument _doc;
public DataSource(XDocument doc)
{
_doc = doc;
}
public IEnumerable<XElement> GetSortedFilteredElements()
{
var formatter = new DateTimeFormatInfo
{
ShortDatePattern = "dd/MM/yyyy"
};
var items = from item in _doc.Descendants("item")
orderby Convert.ToDateTime(item.Attribute("lastChanges").Value, formatter) descending
where item.Attribute("x").Value == "1"
select item;
return items;
}
}
用法:
Repeater1.DataSource =
new DataSource(XDocument.Load(Server.MapPath("file.xml")))
.GetSortedFilteredElements();
接下来要看的是,正如@ david-b所建议的那样,Repeater是否重新排序输入,因为如果按字符串排序,字符串化的XmlNode值肯定会以不同的顺序出现。
答案 1 :(得分:0)
Repeater1.DataBind();
也许您的UI控件已将订单设置为其他内容?