0

今日、明日、明後日の祈りの時間を listBox に入力したいと思います。XML には、年ではなく日と月の値があります。明日または明後日が翌年でない限り、クエリは問題なく動作します。リストには、最初に 01.01、次に 02.01、最後の 31.12 の値が表示されます。

質問: 1) 日付に従って昇順で並べ替える方法。2) "Date" を修正して、この値が "01.01.2012 12:00AM" ではなく monday 01.01.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 が翌年にある場合ではなく、1 年を通して達成されます。

私の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

あなたができることの真髄はこれです:

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 に答える
0

データに年がない場合は、自分で年を変更するための処理を追加する必要があります。これは、比較的簡単ですが、月に対するチェックにすぎません。

文字列に変換するときに日付をフォーマットすることで、日付の表示方法を変更できます。
参照: http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

その LINQ ステートメントを並べ替えに使用するよりも、 CollectionViewSourceを使用する方が簡単な場合があります。

于 2012-05-11T08:56:53.197 に答える