Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Daypilot-从SQL Server加载约会_C#_Sql Server_Calendar_Daypilot - Fatal编程技术网

C# Daypilot-从SQL Server加载约会

C# Daypilot-从SQL Server加载约会,c#,sql-server,calendar,daypilot,C#,Sql Server,Calendar,Daypilot,我正在使用Daypilot创建一个主rota 我目前正在数据库中存储约会,但我想检索某一天的所有约会,并将其显示在日历上,与日期无关 所有在周一创建的约会都应该在周一显示,与日期无关 当前选择 public DataTable GetAssignmentsForLocation(DayPilotCalendar calendar) { DataTable dt = new DataTable(); var da = CreateDataAdapter("select * fro

我正在使用Daypilot创建一个主rota

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

所有在周一创建的约会都应该在周一显示,与日期无关

当前选择

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;
}

创作

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();
    }
}
数据库条目:数据库正在记录每个条目的日期,因此理论上可以加载给定日期值的所有值

例如,“第一天”的所有条目都应在周一显示,与日期无关

日历如下所示。如您所见,没有显示日期,因为如果日期匹配,它应该始终加载约会


请有人帮我建立select语句,以便将约会正确载入日历?例如,第一天到星期一的约会,第二天到星期二的约会等等……

您必须在参数绑定中添加
@

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

您必须在参数绑定中添加
@

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

如果仅显示此周数据(且仅显示周视图),则可以使用以下方法:

加载约会时,使用“日期”字段计算自定义开始和结束日期,并覆盖原始值。在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始终是星期天)。

如果您显示的唯一数据是此每周数据(且唯一视图是周视图),则可以使用以下方法:

加载约会时,使用“日期”字段计算自定义开始和结束日期,并覆盖原始值。在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始终是星期天)。

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


另外,我修改了create,这样就可以将周六作为开始日,而不必在周日开始。显然,你可以改变它,使任何一天都可以成为“开始的一天”


您还没有向我们显示填充日历的代码吗?你只是在填充一个数据表现在添加了它这只是插入,你用来将数据表分配给日历的代码是什么?酷,最后一件事,
GetAssignmentsForLocation
中的代码是什么?已经发布了,这是帖子顶部的第一位代码你还没有向我们展示填充日历的代码吗?你只是在填充一个数据表现在添加了它这只是插入,你用来将数据表分配给日历的代码是什么?酷,最后一件事,
GetAssignmentsForLocation
中的代码是什么?已经发布了,这是postGood拾取顶部的第一位代码,我还想补充一点,使用spoc在位置和周上的索引将更加高效,谢谢,这对这一部分有所帮助,但这并不能解决我最初请求的问题,我还想补充一点,使用spoc在位置和周上的索引将更加高效,谢谢,这对这一部分有所帮助,但它并没有解决我最初提出的问题,这很有效。非常感谢,你不知道这对我们的组织有多大帮助。再次感谢。太棒了,这很有效。非常感谢,你不知道这对我们的组织有多大帮助。再次感谢。