2012-05-11 57 views
0

我想为今天,明天和之后的一天填写一个列表框,以及祈祷节目。 XML具有日期和月份的值,而不是年份。 除非明天或明天是在明年,否则查询的工作没有问题。 然后,列表显示01.01的第一个值,然后是02.01和最后的31.12的值。按日期排序listBox,并显示日期为“dddd”后跟日期?

问题: 1)如何对它进行排序,使其按照日期排序。 2)如何解决“日期”,这样的价值显示为星期一01.01.2012而不是“01.01.2012 12:00 AM” 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; 

回答

0

的你可以做什么的精髓是:

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(); } 
} 

并绑定到显示目的。

+0

谢谢。如何将Date = new DateTime显示为shortDatestring?现在它显示“05/13/2012 12:00:00 AM” – Megaoctane

+0

你几乎自己给出了答案:http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx –

+0

我试过这但它不起作用。我得到日期的代码是:Date = new DateTime(myDay.Year,int.Parse(c.Attribute(“Month”)。Value),int.Parse(c.Attribute(“Day”)。Value)) '我应该在哪里放置.ToShortDateString()。它只是标记一切红色,如果我把它放在末尾 – Megaoctane

0

没有在数据中的一年你就必须添加处理的年份的转变你自己。这应该只是一个月的支票,虽然这是相对直截了当的。

在转换为字符串时,可以通过格式化来更改显示日期的方式。
请参阅:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

而不是利用LINQ语句排序,你会发现它更容易使用一个CollectionViewSource

+0

我应该在哪个月对这个月份进行检查?请你给一个代码示例,或者我的代码应该如何设置? – Megaoctane