C#中如何在DataGridView内自动生成学校课时时间段安排
你的现有代码仅处理了单行内的时间计算,没有关联上下行的时间衔接,也没有预留课间休息间隔,和预期的课时时段效果不匹配。
以下是可直接运行的实现代码,默认单节课40分钟、普通课间休息10分钟,你可以根据实际需求调整时长参数:
// 先设置第一节课的初始上课时间,可根据实际需求修改 DateTime firstStartTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 8, 0, 0); // 课时长度,单位:分钟 int classMinutes = 40; // 普通课间休息长度,单位:分钟 int breakMinutes = 10; // 遍历所有行生成时段 for (int i = 0; i < TimesDgv.RowCount; i++) { // 跳过DataGridView自带的空白新增行,避免触发格式转换报错 if (TimesDgv.Rows[i].IsNewRow) break; if (i == 0) { // 第一行设置初始上课时间 TimesDgv.Rows[i].Cells[1].Value = firstStartTime.ToString("HH:mm"); } else { // 后续行的上课时间 = 上一行的下课时间 + 课间休息时长 DateTime preEndTime = Convert.ToDateTime(TimesDgv.Rows[i-1].Cells[2].Value); // 如果遇到大课间,可在这里加判断单独修改休息时长,比如第2节课后大课间休息20分钟: // if (i == 2) breakMinutes = 20; TimesDgv.Rows[i].Cells[1].Value = preEndTime.AddMinutes(breakMinutes).ToString("HH:mm"); } // 计算当前行的下课时间 = 上课时间 + 课时长度 DateTime currentStartTime = Convert.ToDateTime(TimesDgv.Rows[i].Cells[1].Value); TimesDgv.Rows[i].Cells[2].Value = currentStartTime.AddMinutes(classMinutes).ToString("HH:mm"); }
补充说明:
- 代码默认使用
HH:mm的24小时制时间格式,如果你需要12小时制可以换回你原来的hh:mm格式 - 如果需要给上午/下午的大课间设置更长的休息时间,在遍历到对应行序号的时候单独调整
breakMinutes的数值即可
效果示例:

内容的提问来源于stack exchange,提问作者Bashar
相关产品推荐
相关产品推荐

