2012-05-11 98 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