2017-01-11 18 views
0

我正在使用Daypilot创建主轮盘。Daypilot - 从SQL Server加载约会

我目前在数据库中存储约会,但我想检索某一天的所有约会,并将它们显示在与日期无关的日历上。

E.G星期一创建的所有约会应始终显示在星期一,与DATE无关。

当前选择

public DataTable GetAssignmentsForLocation(DayPilotCalendar calendar) 
{ 
    DataTable dt = new DataTable(); 

    var da = CreateDataAdapter("select * from [master_rota] where [LocationId] = @location and Week = @Week"); 

    AddParameterWithValue(da.SelectCommand, "location", (int)calendar.ClientState["location"]); 
    AddParameterWithValue(da.SelectCommand, "week", (int)calendar.ClientState["week"]); 

    da.Fill(dt); 

    return dt; 
} 

而且

protected void DayPilotCalendar1_Command(object sender, CommandEventArgs e) 
{ 
    switch (e.Command) 
    { 
     case "navigate": 
      var start = (DateTime)e.Data["start"]; 
      DayPilotCalendar1.StartDate = start; 
      DayPilotCalendar1.DataSource = new DataManager_MasterRota().GetAssignmentsForLocation(DayPilotCalendar1); 
      DayPilotCalendar1.DataBind(); 
      DayPilotCalendar1.Update(); 
      break; 
     case "refresh": 
      DayPilotCalendar1.DataSource = new DataManager_MasterRota().GetAssignmentsForLocation(DayPilotCalendar1); 
      DayPilotCalendar1.DataBind(); 
      DayPilotCalendar1.Update(); 
      break; 
     case "day": 
      DayPilotCalendar1.ViewType = ViewTypeEnum.Day; 
      DayPilotCalendar1.StartDate = (DateTime)e.Data["date"]; 

      DayPilotCalendar1.DataSource = new DataManager_MasterRota().GetAssignmentsForLocation(DayPilotCalendar1); 
      DayPilotCalendar1.DataBind(); 
      DayPilotCalendar1.Update(); 
      break; 
     case "week": 
      DayPilotCalendar1.ViewType = ViewTypeEnum.Week; 
      DayPilotCalendar1.DataSource = new DataManager_MasterRota().GetAssignmentsForLocation(DayPilotCalendar1); 
      DayPilotCalendar1.DataBind(); 
      DayPilotCalendar1.Update(); 
      break; 

    } 
} 

创作

public void CreateAssignment(DateTime start, DateTime end, int location, int week, int person, string note, DayOfWeek day) 
{ 
    using (DbConnection con = CreateConnection()) 
    { 
     con.Open(); 

     // string id = ""; 
     var cmd = CreateCommand("insert into [master_rota] ([AssignmentStart], [AssignmentEnd], [LocationId], [PersonId], [AssignmentNote], week, day) values (@start, @end, @location, @person, @note, @Week, @day)", con); 
     AddParameterWithValue(cmd, "start", start); 
     AddParameterWithValue(cmd, "end", end); 
     AddParameterWithValue(cmd, "location", location); 
     AddParameterWithValue(cmd, "week", week); 
     AddParameterWithValue(cmd, "person", person); 
     AddParameterWithValue(cmd, "note", note); 
     AddParameterWithValue(cmd, "day", day); 

     cmd.ExecuteScalar(); 
    } 
} 

数据库条目:数据库记录每个条目的日子,所以理论上它应该是可能的加载给定日期值的所有值

E.G为“1天”的所有条目,都应该显示在周一,不相关的日期的

enter image description here

日历看起来像下面。正如你可以看到有没有显示日期,如果有一天匹配

enter image description here

可能有人请帮助我建立select语句,以便任命加载到日历正确应该总是加载预约吗? EG第1天预约到周一,2日周二等等....

+1

你没有向我们展示填充日历的代码吗?你只是在填写一张DataTable –

+0

现在就添加它 –

+0

这只是INSERT,你用什么代码将数据表分配给日历? –

回答

1

如果要显示的唯一数据是该周数据(和唯一的视图是周视图),那么你可以使用以下方法:

加载约会时,使用“日”字段来计算自定义开始和结束日期并覆盖原始值。这将是很难做到的,在SQL,但你可以修改GetAssignmentsForLocation()进行后处理数据轻松设置:

public DataTable GetAssignmentsForLocation(DayPilotCalendar calendar) 
{ 
    DataTable dt = new DataTable(); 

    var da = CreateDataAdapter("select * from [master_rota] where [LocationId] = @location and Week = @Week"); 

    AddParameterWithValue(da.SelectCommand, "@location", (int)calendar.ClientState["location"]); 
    AddParameterWithValue(da.SelectCommand, "@week", (int)calendar.ClientState["week"]); 

    da.Fill(dt); 

    foreach (DataRow dr in dt.Rows) { 
     int dayOfWeek = (int) dr["Day"]; 
     DateTime start = (DateTime) dr["AssignmentStart"]; 
     DateTime end = (DateTime) dr["AssignmentEnd"]; 

     TimeSpan duration = end - start; 
     TimeSpan startTime = start.TimeOfDay; 

     dr["AssignmentStart"] = calendar.VisibleStart.AddDays(dayOfWeek).AddTime(startTime); 
     dr["AssignmentEnd"] = calendar.VisibleStart.AddDays(dayOfWeek).AddTime(startTime).AddTime(duration); 

    } 

    return dt; 
} 

请注意,这仅适用于周日为一周的第一天(即calendar.VisibleStart总是星期天)。

+0

惊人的,这个作品。非常感谢,你不知道这会对我们组织有多大帮助。再次感谢。 –

1

您必须添加@您的参数域:

AddParameterWithValue(da.SelectCommand, "@location", (int)calendar.ClientState["location"]); 
AddParameterWithValue(da.SelectCommand, "@week", (int)calendar.ClientState["week"]); 
+0

好的皮卡,我还会添加使用一个spoc将更有效率与指数的位置和星期 –

+0

嗨,谢谢,这有助于该部分,但它并不能解决我原来的问题,我要求 –

1

此外,我修改了创建,以便它可以通过将星期六作为开始日期工作,因此它不需要在星期天开始。显然你可以改变它,以便任何一天都可以成为“开始日”

public void CreateAssignment(DateTime start, DateTime end, int location, int week, int person, string note, DayOfWeek day) 
    { 
     using (DbConnection con = CreateConnection()) 
     { 
      con.Open(); 
      //string id = ""; 

      var cmd = CreateCommand("insert into [master_rota] ([AssignmentStart], [AssignmentEnd], [LocationId], [PersonId], [AssignmentNote], week, day) values (@start, @end, @location, @person, @note, @Week, @day)", con); 
      AddParameterWithValue(cmd, "start", start); 
      AddParameterWithValue(cmd, "end", end); 
      AddParameterWithValue(cmd, "location", location); 
      AddParameterWithValue(cmd, "week", week); 
      AddParameterWithValue(cmd, "person", person); 
      AddParameterWithValue(cmd, "note", note); 
      if (day == DayOfWeek.Saturday) 
      { 
       AddParameterWithValue(cmd, "day", day - 6); 
      } 
      else 
      AddParameterWithValue(cmd, "day", day + 1); 

      cmd.ExecuteScalar(); 

     } 
    }