private void FillCalendar() { tbl.Controls.Clear(); Table tb = new Table(); tb.CssClass = cssMainContainerClass ?? Consts.cssMainContainerClass; GenerateWeekHeaders(tb); DateTime d = IDate.HasValue ? IDate.Value : DateTime.Now.StartOfWeek(); int startMonth = d.Month; int numberOfWeeks = (int)DisplayMode; MethodInfo m = Page.GetType().GetMethod(GetDataSourceMethodName); var Items = (List <XCalendarItem>)m.Invoke(Page, new object[] { }); for (int i = 0; i < numberOfWeeks; i++) { TableRow weekRow = new TableRow(); for (int j = 0; j < 7; j++) { while (j < (int)d.DayOfWeek) { weekRow.AddWeekDay(new Table()); // irelevant date j++; } if (d.IsSameMonth(startMonth)) { var xd = new xCalendarDay(d); xd.DateInfos = Items.Where(x => x.Date == d.Date).ToList(); var innerTable = xd.GetDay(); innerTable.SetStyles(cssDayItemHeaderClass ?? Consts.cssDayItemHeaderClass, cssDayItemClass ?? Consts.cssDayItemClass); innerTable.CssClass = cssDayItemContainerClass ?? Consts.cssDayItemContainerClass; if (d.IsToday()) { innerTable.CssClass = string.Format("{0} {1}", innerTable.CssClass, cssToDayItemClass ?? Consts.cssToDayItemClass); } weekRow.AddWeekDay(innerTable); } d = d.AddDays(1); } tb.Controls.Add(weekRow); } tbl.Controls.Add(tb); }