我想用今天、明天和后天的祈祷时间填充一个listBox。XML具有日和月的值,而不是年的值。查询工作没有问题,除非明天或后天是在下一年。然后,列表首先显示01.01的值,然后显示02.01和最后31.12的值。
问: 1)如何对其进行排序,使其按日期升序排序。2)如何确定"Date“,使其值显示为星期一01.01.2012,而不是"01.01.2012 12:00AM”2)如何将01.01和02.01显示为2013,而不是2012,因为年份发生了变化。
在我的列表框中如下所示:
01.01.2012 12:00AM
Fajr 07:00
Soloppgang 09:19
etc..
02.01.2012 12:00AM
Fajr 07:00
Soloppgang 09:19
etc..
31.12.2012 12:00AM
Fajr 07:00
Soloppgang 09:19
etc...我想要的结果是全年实现的,而不是当nextDay或thirdDay在下一年实现的时候。
我的XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<WIMPrayerTable>
<Prayertime
Day ="1"
Month="1"
Fajr="07:00"
Soloppgang="09:19"
Zohr="12:26"
Asr="13:36"
Maghrib="15:26"
/>
<Prayertime
Day ="2"
Month="1"
Fajr="07:00"
Soloppgang="09:19"
Zohr="12:25"
Asr="13:33"
Maghrib="15:23"
Isha="17:39"
/>//今年剩下的时间在这里。我不会在这里展示它
我的班级:
public class Bonn3
{
public string Fajr { get; set; }
public string Soloppgang { get; set; }
public string Zohr { get; set; }
public string Asr { get; set; }
public string Maghrib { get; set; }
public string Isha { get; set; }
public string Jumma { get; set; }
public DateTime Date { get; set; }
}我的问题是:
DateTime myDay = DateTime.Now;
DateTime NextDay = myDay.AddDays(1);
DateTime thirdDay = myDay.AddDays(2);
var filteredData = from c in loadedCustomData.Descendants("Bønnetid")
where c.Attribute("Dag").Value == myDay.Day.ToString() && c.Attribute("Måned").Value == myDay.Month.ToString()
|| c.Attribute("Dag").Value == NextDay.Day.ToString() && c.Attribute("Måned").Value == NextDay.Month.ToString()
|| c.Attribute("Dag").Value == thirdDay.Day.ToString() && c.Attribute("Måned").Value == thirdDay.Month.ToString()
select new Bonn3()
{
Date = new DateTime(myDay.Year,int.Parse(c.Attribute("Måned").Value),int.Parse(c.Attribute("Dag").Value)),
Fajr = c.Attribute("Fajr").Value,
Soloppgang = c.Attribute("Soloppgang").Value,
Zohr = c.Attribute("Zohr").Value,
Asr = c.Attribute("Asr").Value,
Maghrib = c.Attribute("Maghrib").Value,
Isha = c.Attribute("Isha").Value,
};
listBox1.ItemsSource = filteredData;发布于 2012-05-13 03:41:04
你可以做的事情的精髓是:
int year = DateTime.Now.Year;
int lastMonth = 12;
var bonn3s = new List<Bonn3>();
foreach (var d in filtererData)
{
int month = int.Parse(c.Attribute("Måned").Value);
if (lastMonth - month < 0)
year--;
bonn3s.Add(new Bonn3()
{
Date = new DateTime(year,month,int.Parse(c.Attribute("Dag").Value)),
....
lastMonth = month;
}编辑
您可以给Bonn3一个属性DateString (或类似的属性):
public string DateString
{
get { return this.Date.ToShortDateString(); }
}并绑定到它以用于显示目的。
发布于 2012-05-11 16:56:53
如果数据中没有年份,您将不得不自己添加对年份变化的处理。这应该只是一个月的检查,尽管相对简单。
您可以通过在转换为字符串时设置日期的格式来更改日期的显示方式。
请参阅:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx
与使用LINQ语句进行排序相比,您可能会发现使用CollectionViewSource更容易。
https://stackoverflow.com/questions/10546386
复制相似问题