0

我想用今天、明天和后天的祈祷时间填充一个列表框。XML 有日期和月份的值,而不是年份。除非明天或后天是在下一年,否则查询没有问题。然后列表首先显示 01.01 的值,然后是 02.01 和最后一个 31.12。

问题:1)如何对其进行排序,以便根据日期升序排序。2)如何修复“日期”,使其值显示为星期一 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;
4

2 回答 2

0

如果数据中没有年份,您将不得不自己添加对年份变化的处理。这应该只是对月份的检查,尽管相对简单。

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

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

于 2012-05-11T08:56:53.197 回答
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(); }
}

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

于 2012-05-12T19:41:04.250 回答