You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的数值即可

效果示例:
效果示例截图1
效果示例截图2

内容的提问来源于stack exchange,提问作者Bashar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:54:05