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

如何在C#的DataGridView中显示未来一年的所有周一?

解决DataGridView显示未来一年所有周一的问题

嘿,刚学C#就能动手写功能超棒!你的代码现在重复显示同一个周一,是因为每次循环都在重新计算当前周的周一,没有往后推进时间,而且固定50次循环也不够精准(一年其实约52周)。我帮你调整一下代码,完美实现需求:

问题分析

你的现有代码里,这行是核心问题:

string monday = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek + (int)DayOfWeek.Monday).ToString("dd-MM-yyyy");

每次循环都会重新计算「今天所在周的周一」,没有累加周数,所以50次循环都是同一个日期。另外格式用了dd-MM-yyyy,和你要的dd/MM/yyyy不符,固定50次也不如按日期范围生成准确。

修正后的代码

// 先清空DataGridView现有行,避免重复添加数据
metroDataGrid1.Rows.Clear();

// 获取当前周的周一:如果今天是周一就取今天,否则取本周一
DateTime currentMonday = DateTime.Today;
if (currentMonday.DayOfWeek != DayOfWeek.Monday)
{
    currentMonday = currentMonday.AddDays(-(int)currentMonday.DayOfWeek + (int)DayOfWeek.Monday);
}

// 计算一年后的日期,作为循环终止条件
DateTime oneYearLater = DateTime.Today.AddYears(1);

// 循环生成每个周一,直到日期超过一年后
while (currentMonday <= oneYearLater)
{
    // 按dd/MM/yyyy格式转换日期为字符串
    string mondayStr = currentMonday.ToString("dd/MM/yyyy");
    metroDataGrid1.Rows.Add(mondayStr);
    
    // 往后推7天,得到下一个周一
    currentMonday = currentMonday.AddDays(7);
}

// 设置所有行的高度,排除最后一行的空行(如果开启了允许新增行)
foreach (DataGridViewRow row in metroDataGrid1.Rows)
{
    if (!row.IsNewRow)
    {
        row.Height = 60;
    }
}

代码细节解释

  • 清空现有行:避免重复运行代码时,DataGridView里堆积重复数据
  • 精准获取起始周一:判断今天是否为周一,确保起始日期符合「当前周周一」的要求
  • 按日期范围循环:用「当前周一 ≤ 一年后日期」作为循环条件,比固定50次更贴合“未来一年”的需求
  • 每周递进一次:每次循环后用AddDays(7)跳转到下一个周一,避免重复日期
  • 格式修正:用dd/MM/yyyy生成你需要的日期字符串格式
  • 跳过空行:如果你的DataGridView开启了允许用户新增行的功能,设置行高时自动跳过最后一行的空白行

这样就能完美显示从当前周一开始,未来一年的所有周一啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:42:02