按日期排序listBox,并将日期显示为“dddd”,后跟日期?

时间:2012-05-11 06:21:13

标签: c# linq windows-phone-7 listboxitems

我想在今天,明天和后一天用祈祷文填充一个listBox。 XML具有日期和月份的值,而不是年份。 除非明天或后天在明年,否则查询无问题。 然后列表显示01.01的值,然后是02.01和最后的31.12。

问题: 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...

我想要的结果是全年实现的,而不是在下一个日或第三天是在明年。

我的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;

2 个答案:

答案 0 :(得分:0)

如果没有数据中的年份,您必须自己为年度变化添加处理。这应该只是对月份的检查,虽然相对直接。

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

您可能会发现使用CollectionViewSource更容易,而不是使用该LINQ语句进行排序。

答案 1 :(得分: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(); }
}

并绑定到它以用于显示目的。