上一篇有点扩展性不好,因此改造了下生成日历数据的算法,可以供外部调用,源码如下
public class CalendarHelper { public static System.Data.DataTable PrintDay(int year = -1, int month = -1) { //获得所有的星期的数组 var weekdays = Enum.GetNames(typeof(DayOfWeek)); if (year <= 0 || year > 9999) year = DateTime.Now.Year; if (month < 1 || month > 12) month = DateTime.Now.Month; //今天周几 DayOfWeek dayOfWeek = DateTime.Now.DayOfWeek; //该变量用于补空格 int flag = (int)dayOfWeek; //switch (dayOfWeek) //{ // case DayOfWeek.Sunday: flag = 0; break; // case DayOfWeek.Monday: flag = 1; break; // case DayOfWeek.Tuesday: flag = 2; break; // case DayOfWeek.Wednesday: flag = 3; break; // case DayOfWeek.Thursday: flag = 4; break; // case DayOfWeek.Friday: flag = 5; break; // case DayOfWeek.Saturday: flag = 6; break; //} int daysInMonth = DateTime.DaysInMonth(year, month); //展示日历每行7列,供需要多少行 int row = (flag + daysInMonth) % 7 == 0 ? (flag + daysInMonth) % 7 : (flag + daysInMonth) % 7 + 1; //存放日历数据的变量 System.Data.DataTable dtCalendar = new System.Data.DataTable(); //列头 for (int i = 0; i < weekdays.Length; i++) { dtCalendar.Columns.Add(weekdays[i]); } int columnIndex = 0; System.Data.DataRow dataRow = null; if (flag > 0) { //获得下当前日历的列索引 columnIndex = flag; dataRow = dtCalendar.NewRow(); dtCalendar.Rows.Add(dataRow); //填充空格 for (int j = 0; j < flag; j++) { dataRow[j] = string.Empty; } } if (dataRow == null) { dataRow = dtCalendar.NewRow(); dtCalendar.Rows.Add(dataRow); } for (int i = 1; i <= daysInMonth; i++) { dataRow[columnIndex] = i; //下一行 if (columnIndex == 6) { dataRow = dtCalendar.NewRow(); dtCalendar.Rows.Add(dataRow); columnIndex = 0; } else columnIndex++; } dtCalendar.AcceptChanges(); return dtCalendar; } }控制器代码
public ActionResult Index() { ViewBag.Calendar = CalendarHelper.PrintDay(); return View(); }
视图代码 <table> <tbody> <tr> @{ System.Data.DataTable dtCalendar = ViewBag.Calendar as System.Data.DataTable; foreach (System.Data.DataColumn column in dtCalendar.Columns) { <td>@column.ColumnName</td> } } </tr> </tbody> @{ for (int rowIndex = 0; rowIndex < dtCalendar.Rows.Count; rowIndex++) { <tr> @{ for (int columnIndex = 0; columnIndex < dtCalendar.Columns.Count; columnIndex++) { <td>@dtCalendar.Rows[rowIndex][columnIndex].ToString()</td> } } </tr> } } </table> 测试2017年2月8日15:05:29 结果
SundayMondayTuesdayWednesdayThursdayFridaySaturday 12345678910111213141516171819202122232425262728
转载请注明出处