private void CreateDaysColumnHeaders() { startDate = DateTime.ParseExact(startDate.ToString("yyyyMMdd"), "yyyyMMdd", null); finishDate = DateTime.ParseExact(finishDate.ToString("yyyyMMdd"), "yyyyMMdd", null); for (DateTime dt = startDate; dt <= finishDate; dt = dt.AddDays(1)) { YearMonthWeekNoDayHeader calHeader = new YearMonthWeekNoDayHeader(dt, startDayOfWeek); headGen.AddHeaders(calHeader); } }
public override void DrawHeaders(int firstVisibleCol, int lastVisibleCol, int controlWidth, Graphics graphics, Rectangle rect) { SolidBrush brush = new SolidBrush(SystemColors.ControlLight); Pen pen = new Pen(Color.LightGray); int columnStartX = 0; int calendarStartX = 0; graphics.FillRectangle(brush, columnStartX + 1, 1, leftHeaderWidth, topHeaderHeight); graphics.DrawRectangle(pen, columnStartX + 1, 1, leftHeaderWidth, topHeaderHeight); columnStartX += leftHeaderWidth; //첫 시작컬럼의 폭을 leftHeaderWidth 만큼 설정 //주차 기간을 저장하기 위한 Dictionary - width 계산을 위해 필요 Dictionary <int, List <int> > dicWeekNo = new Dictionary <int, List <int> >(); //년월 기간을 저장하기 위한 Dictionary - width 계산을 위해 필요 Dictionary <string, List <int> > dicYearMonth = new Dictionary <string, List <int> >(); for (int i = firstVisibleCol; i <= lastVisibleCol; i++) { if (!this._headers[i].Visible) { continue; } int headerWidth = this._headers[i].Width; //i 번째 컬럼의 폭을 설정 //보여지는 컬럼의 폭이 컨트롤의 폭 보다 클경우 if (columnStartX + headerWidth > controlWidth) { headerWidth = controlWidth - columnStartX - 3; if (lastVisibleCol == (this._headers.Count - 1)) { IsLargeLastCol = true; } } else { IsLargeLastCol = false; } YearMonthWeekNoDayHeader yearMonthHeader = this._headers[i] as YearMonthWeekNoDayHeader; if (yearMonthHeader.GetDateTime <= DateTime.MinValue) { //Grid Header를 그린다. DrawTextUtil.DrawGridHeaderRectangleAndText(graphics, brush, blackBrush, pen, this._headers, headerFont, i, columnStartX, headerWidth, topHeaderHeight); } else //Calendar 날짜 형태의 컬럼을 그리기 위한 사전 준비 { if (calendarStartX == 0) { calendarStartX = columnStartX; } //Calendar 날짜 형태의 컬럼 Header 그리기(일) DrawTextUtil.DrawGridHeaderCalendarRectangleAndText(graphics, brush, blackBrush, pen, this._headers, headerFont, i, columnStartX, headerWidth); if (!dicWeekNo.ContainsKey(yearMonthHeader.WeekNumber)) { dicWeekNo.Add(yearMonthHeader.WeekNumber, new List <int>()); } if (yearMonthHeader.Visible) { dicWeekNo[yearMonthHeader.WeekNumber].Add(yearMonthHeader.Width); } if (!dicYearMonth.ContainsKey(yearMonthHeader.YearMonth)) { dicYearMonth.Add(yearMonthHeader.YearMonth, new List <int>()); } if (yearMonthHeader.Visible) { dicYearMonth[yearMonthHeader.YearMonth].Add(yearMonthHeader.Width); } } columnStartX += headerWidth; } //Calendar 날짜 형태의 컬럼 Header 그리기(주차/년월) DrawTextUtil.DrawGridHeaderCalendarWeekNumberRectangleAndText(graphics, brush, blackBrush, pen, headerFont, dicWeekNo, calendarStartX); DrawTextUtil.DrawGridHeaderCalendarYearMonthRectangleAndText(graphics, brush, blackBrush, pen, headerFont, dicYearMonth, calendarStartX); }