2011-10-28 48 views
0

我對我的日曆有特定的問題。它很難解釋,但通過確定本週#(本月)和我每週做網格。日期並不正確。例如:2011年10月1日應該從週六開始,因爲第一週是在第一週,但是從星期六開始,日曆應該是這樣的:(假設每天都有網格)我知道爲什麼會出現這個問題不知道如何解決它。這些日期並沒有排在他們應該在電網上的位置。wpf使用網格製作日曆

日曆應該是這樣的:

 
    Columns  October 2011 grid.column = 7 (0-6) grid.row = 6 (0-5) (Sunday-Saturday) 

    Sunday Monday Tuesday Wednesday Thursday Friday Saturday 
row 0  1  2  3  4  5  6 
0  ------------------------------------------------- 1st 
1  2nd  3rd  4th  5th  6th-----------etc..--- 
2 --------------------------------------------etc...------ 
3 ------etc..--------------------------------------------- 
4 ---------------- 25th  26th 27th  28th 29th 
5 30th  31st 

但是我的是這樣的:(0-4欄應下移一行)

 
    Sunday Monday Tuesday Wednesday Thursday Friday Saturday 
row 0  1  2  3  4  5  6 
0  2nd  3rd  4th  5th  6th------------- 1st 
1  9th  10th  11th 12th  13th-----------etc..--- 
2 --------------------------------------------etc...------ 
3 ------etc..------25th  26th 27th----------------- 
4 30th  31st--- ---------------------  28th 29th 
5 ------------- 

代碼:

public SchedulePage(MainWindow parentForm) 
{ 
    InitializeComponent(); 

    _parentForm = parentForm; 

    // DateTime date = new DateTime(year, month, day); 
    var t = new List<Schedule>(); 
    DateTime curr = DateTime.Now; 
    DateTime newcurr = new DateTime(curr.Year, curr.Month, 1); 
    var cal = System.Globalization.DateTimeFormatInfo.CurrentInfo.Calendar; 
    var ms = cal.GetWeekOfYear(new DateTime(newcurr.Year, newcurr.Month, 1), System.Globalization.CalendarWeekRule.FirstDay, System.DayOfWeek.Sunday); 

    for (var i = 1; newcurr.Month == curr.Month; newcurr = newcurr.AddDays(1)) 
    { 
     var sched = new Schedule(); 
     var month_week = (newcurr.Day/7) + 1; 
     sched.MonthWeek = month_week.ToString(); 
     sched.Month = newcurr.Month.ToString(); 
     sched.Year = newcurr.Year.ToString(); 
     sched.day = newcurr.Day.ToString(); 
     sched.WeekOfYear = cal.GetWeekOfYear(newcurr, System.Globalization.CalendarWeekRule.FirstDay, DayOfWeek.Sunday).ToString(); 
     sched.dayofweek = newcurr.DayOfWeek.ToString(); 
     t.Add(sched); 

    /* if (newcurr.Day == 1 && (int)newcurr.DayOfWeek == 7) 
     { 
      int findspot = month_week - 1; 

      //_parentForm.bindings.schedule.Add(new Schedule { 
      // WeekNo = month_week - findspot, 
      // WeekDay = (int)newcurr.DayOfWeek, 
      // day = newcurr.Day.ToString() 
      //}); 
     } */ 

     _parentForm.bindings.schedule.Add(new Schedule { 
      WeekNo = month_week - 1 , 
      WeekDay = (int)newcurr.DayOfWeek, 
      day = newcurr.Day.ToString() 
     }); 
    } 
} 
+0

對不起我的畫沒使用ExtensionMethod我沒有想到它的方式,但如果你看看2011年10月你的日曆,你會看到總共有6行,第一行(grid.row(0))只包含星期六(十月一日),但我的包含2日 - 6日和1日星期六。 – TMan

+0

您可以使用ImageShack上傳正在發生的事情和想要的快照,並使用圖像小屋圖片鏈接在堆棧溢出問題編輯器上使用「插入圖像」選項。 –

回答

3

您正在使用(day/7) + 1獲得該月的WeekNo(行號)。這將是不正確的,除非這個月在星期日開始。

使用在this SO answer發現代碼即可獲得當月正確的週數

它會爲DateTime類,然後你就可以通過調用newcurr.GetWeekOfMonth()

static class DateTimeExtensions { 
    static GregorianCalendar _gc = new GregorianCalendar(); 
    public static int GetWeekOfMonth(this DateTime time) { 
     DateTime first = new DateTime(time.Year, time.Month, 1); 
     return time.GetWeekOfYear() - first.GetWeekOfYear() + 1; 
    } 

    static int GetWeekOfYear(this DateTime time) { 
     return _gc.GetWeekOfYear(time, CalendarWeekRule.FirstDay, DayOfWeek.Sunday); 
    } 
}