【问题标题】:Display list of events grouped by day of the week显示按星期几分组的事件列表
【发布时间】:2015-04-17 16:58:22
【问题描述】:

我正在尝试根据 sql server 数据库中的数据条目显示每天的事件列表。我希望它像这样显示在页面上:

Monday - Title1 Title2
Tuesday - Title3
Wednesday - Title4 Title5

现在我的数据是这样的

Title  | StartDate
Title1 | 2015-04-20 16:46:00.00
Title2 | 2015-04-20 12:46:00.00
Title3 | 2015-04-21 16:46:00.00
Title4 | 2015-04-22 1:46:00.00
Title5 | 2015-04-22 13:12:00.00

我只需要接下来的 7 天。我对此很陌生,这就是我试图做的,但这根本不像我想要的那样工作。

StringBuilder el = new StringBuilder();
using (SqlConnection conn = new SqlConnection(""))
{
            SqlCommand cmd = new SqlCommand(@"select * from Event where
                                            convert(datetime, StartDate , 101) >= DATEADD(d,DATEDIFF(d,0,getdate()),0) 
                                            order by StartDate", conn);
            conn.Open();
            SqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                DateTime start = DateTime.Now;
                DateTime end = DateTime.Now.AddDays(7);
                int days = (end - start).Days;
                Enumerable
                    .Range(0, days)
                    .Select(x => start.AddDays(x))
                    .ToList()
                    .ForEach(d =>
                    {
                        DayOfWeek dayOfWeek = d.DayOfWeek;
                        el.Append("<strong>" + Convert.ToDateTime(rdr["StartDate"].ToString()).DayOfWeek + "</strong><br />");
                        el.Append(rdr["Title"].ToString() + "<br />");
                    });
            }
            rdr.Close();
}
Label1.Text = el.ToString();

【问题讨论】:

标签: c# sql asp.net webforms


【解决方案1】:

在代码中处理它的一种方法是跟踪处理的最后一天并在它发生变化时打印该日期。请看下面的例子。

StringBuilder el = new StringBuilder();
using (SqlConnection conn = new SqlConnection(connString)) {
  SqlCommand cmd = new SqlCommand(@"
              select * from Event 
              WHERE DATEDIFF(d, getdate(), StartDate) BETWEEN 0 and 6
              order by StartDate", conn);
  conn.Open();
  SqlDataReader rdr = cmd.ExecuteReader();

  if (rdr.HasRows) {
    rdr.Read();
    System.DayOfWeek lastDayProcessed = (DateTime)rdr["StartDate"]).DayOfWeek;
    el.AppendLine("<strong>" + lastDayProcessed + "</strong> -");
    el.Append(" " + rdr["Title"].ToString());

    while (rdr.Read()) {
      if (((DateTime)rdr["StartDate"]).DayOfWeek != lastDayProcessed) {
        // print the Day heading whenever the day changes
        el.AppendLine("<br />");
        lastDayProcessed = ((DateTime)rdr["StartDate"]).DayOfWeek;
        el.AppendLine("<strong>" + lastDayProcessed + "</strong> -");
      }
      el.Append(" " + rdr["Title"].ToString());
    }
  }
  rdr.Close();
}

我将 WHERE 子句调整为 7 天;今天和接下来的六天。

【讨论】:

    猜你喜欢
    • 2022-08-10
    • 2022-07-07
    • 2017-01-12
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 2012-11-08
    • 2020-10-23
    相关资源
    最近更新 更多