【问题标题】:ASP.net For Loop IssueASP.net For 循环问题
【发布时间】:2025-12-25 14:50:12
【问题描述】:

我的 For 循环有问题,看起来像这样

for (int i = 0; i < dt.Rows.Count; i++)
        //for (int i = 0; i < System.Math.Min(dt.Rows.Count, 3); i++)
        {
            string date = Convert.ToDateTime(dt.Rows[i]["date"]).ToShortDateString();
            schedule[date] = (schedule[date] != null ? schedule[date].ToString() : "")    + Server.HtmlEncode(dt.Rows[i]["todo"].ToString()) + "<br />" + dt.Rows[i]["time"].ToString() + "<br />";
        }
        return schedule;

这是我用 asp.net 日历控件制作的日历。 它遍历所有记录到我的数据库中并返回我的日程安排(该日期的记录),但我不想显示超过 3 行可以添加到日历(数据库记录)的文本。你知道我该怎么做吗?

谢谢你,亲切的问候,设计师

【问题讨论】:

  • 注释掉的代码有什么问题?
  • 如果我使用那个,我只会从数据库中返回 3 条记录,所以它所做的只是给我 3 个月的时间:P,所以它只在我的整个日历中显示 3 个日期以及我的每天要在一个日历日内不超过 3 条记录。泰乔治
  • 对不起我的蹩脚的英国荷兰人:)
  • 这种问题通常最好通过直接从数据库中过滤掉正确记录的 SQL 查询来解决。
  • 安德斯·阿贝尔也是一种方式,但我希望它保持简单:)

标签: c# asp.net visual-studio-2010 loops for-loop


【解决方案1】:

您可以对每个日期添加的行数进行计数:

Dictionary<string, int> schedulesDateCount = new Dictionary<string, int>();

for (int i = 0; i < dt.Rows.Count; i++)
{
    string date = Convert.ToDateTime(dt.Rows[i]["date"]).ToShortDateString();

    if(!schedulesDateCount.ContainsKey(date))
        schedulesDateCount[date] = 0;

    if(schedulesDateCount[date] < 3)
    {
        schedule[date] = (schedule[date] != null ? schedule[date].ToString() : "")    + Server.HtmlEncode(dt.Rows[i]["todo"].ToString()) + "<br />" + dt.Rows[i]["time"].ToString() + "<br />";
        schedulesDateCount[date] = schedulesDateCount[date] + 1;
    }
}
return schedule;

【讨论】:

  • @George Duckett 我认为您应该将 .HasKey 方法替换为 .ContainsKey 方法 if(!schedulesDateCount.HasKey(date)) schedulesDateCount[date] = 0;将是: if(!schedulesDateCount.ContainsKey(date)) schedulesDateCount[date] = 0;那么它应该可以工作了!