首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按日期对listBox进行排序,并将日期显示为"dddd“后跟日期?

按日期对listBox进行排序,并将日期显示为"dddd“后跟日期?
EN

Stack Overflow用户
提问于 2012-05-11 14:21:13
回答 2查看 424关注 0票数 0

我想用今天、明天和后天的祈祷时间填充一个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,因为年份发生了变化。

在我的列表框中如下所示:

代码语言:javascript
复制
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:

代码语言:javascript
复制
    <?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" 
        />

//今年剩下的时间在这里。我不会在这里展示它

我的班级:

代码语言:javascript
复制
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; }
  }

我的问题是:

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-13 03:41:04

你可以做的事情的精髓是:

代码语言:javascript
复制
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 (或类似的属性):

代码语言:javascript
复制
public string DateString
{
    get { return this.Date.ToShortDateString(); }
}

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

票数 0
EN

Stack Overflow用户

发布于 2012-05-11 16:56:53

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

您可以通过在转换为字符串时设置日期的格式来更改日期的显示方式。

请参阅:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

与使用LINQ语句进行排序相比,您可能会发现使用CollectionViewSource更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10546386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档