【问题标题】:sort listBox by date, and show date as "dddd" followed by the date?按日期排序列表框,并将日期显示为“dddd”后跟日期?
【发布时间】:2012-05-11 06:21:12
【问题描述】:

我想用今天、明天和后天的祈祷时间填充列表框。 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;

【问题讨论】:

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


    【解决方案1】:

    你能做的精髓是:

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

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

    【讨论】:

    • 谢谢。如何将 Date= new DateTime 显示为 shortDatestring?现在它显示“05/13/2012 12:00:00 AM”
    • 你几乎自己给出了答案:msdn.microsoft.com/en-us/library/…
    • 我试过了,但它不起作用。我获取日期的代码是:Date = new DateTime(myDay.Year, int.Parse(c.Attribute("Month").Value), int.Parse(c.Attribute("Day").Value)) 我应该把 .ToShortDateString() 放在哪里。如果我把它放在最后,它只会把所有东西都标记为红色
    • 当您在 UI 中显示您的日期时,您可以使用ToShortDateString。日期时间变量本身不包含任何显示格式。
    • 对不起,我很愚蠢。但请帮助我。是不是应该在 XAML 页面中放这个?在我的 XAML 中有一个列表、textBlock 和 text="{Binding Date}",它给了我“05/13/2012 12:00:00 AM”。我应该把代码放在哪里?我的过滤数据也被提供。我在合并您上面提供的代码时也遇到了困难。对不起,我的 c# 知识有限:(而且我还在尝试和学习..
    【解决方案2】:

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

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

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

    【讨论】:

    • 我应该把这个月的支票放在哪里?请您提供一个代码示例,或者我的代码应该如何设置?
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 2017-11-15
    • 2015-07-18
    • 2011-02-19
    • 2021-07-05
    • 1970-01-01
    • 2017-03-19
    • 2023-03-17
    相关资源
    最近更新 更多