- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
有人可以帮我设计学生的时间表吗?下面的屏幕截图数据是从 2 个模型中的数据库中获取的,第一个模型具有该学生的不同开始时间和结束时间,第二个模型具有开始时间、结束时间和类(class)详细信息,在我运行循环的 View 中在 model1 中的每个元素和 model2 中每天的另一个内部循环中,请参阅下面的代码了解详细信息
问题是:我想组织与 outlook 日历相同的日程 View (图 2)生成一个从开始时间到结束时间的正方形,我已经尝试了大多数插件来管理它但没有成功。
谢谢
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-body">
<table class="table table-bordered" style="background-color:white !important;">
<thead>
<tr class="bg-primary align-center">
<td class="text-bold" width="10%">Time</td>
<td class="text-bold" width="15%">Sunday</td>
<td class="text-bold" width="15%">Monday</td>
<td class="text-bold" width="15%">Tuesday</td>
<td class="text-bold" width="15%">Wednesday</td>
<td class="text-bold" width="15%">Thursday</td>
<td class="text-bold" width="15%">Saturday</td>
</tr>
</thead>
@if (Model != null)
{
foreach (var item in Model.TimeSlot)
{
<tr class="align-center">
<td class="bg-info text-bold" style="white-space: nowrap;">@item.BEGIN_TIME_DISP - @item.END_TIME_DISP</td>
<td class="drop" id="@("Sun" + item.BEGIN_TIME+item.END_TIME)">
@foreach (var Sitem in Model.Schedule.Where(i => i.SUN == "U" && i.BEGIN_TIME == @item.BEGIN_TIME && i.END_TIME == @item.END_TIME))
{
<span style="color:blue; font-weight:bold;">
<a href="javascript:void(GetCRNClassRoster('@Sitem.TERM_CODE','@Sitem.COURSE_CRN'));" class="link" title="Click to view class roster">
@Sitem.COURSE_CRN<br />
@Sitem.COURSE_CODE
</a><br />
@Sitem.COURSE_TITLE<br />
</span>
@Sitem.ROOM_CODE
<span style="color:darkred; font-size:10px" class="sDate">
<br />
from @Sitem.START_DATE_CHAR to @Sitem.END_DATE_CHAR<br />
</span>
}
</td>
<td class="drop" id="@("Mon" + item.BEGIN_TIME+item.END_TIME)">
@foreach (var Sitem in Model.Schedule.Where(i => i.MON == "M" && i.BEGIN_TIME == @item.BEGIN_TIME && i.END_TIME == @item.END_TIME))
{
<span style="color:blue; font-weight:bold;">
<a href="javascript:void(GetCRNClassRoster('@Sitem.TERM_CODE','@Sitem.COURSE_CRN'));" class="link" title="Click to view class roster">
@Sitem.COURSE_CRN<br />
@Sitem.COURSE_CODE
</a><br />
@Sitem.COURSE_TITLE<br />
</span>
@Sitem.ROOM_CODE<br />
<span style="color:darkred; font-size:10px" class="sDate">
from @Sitem.START_DATE_CHAR to @Sitem.END_DATE_CHAR<br />
</span>
}
</td>
<td class="drop" id="@("Tue" + item.BEGIN_TIME+item.END_TIME)">
@foreach (var Sitem in Model.Schedule.Where(i => i.TUE == "T" && i.BEGIN_TIME == @item.BEGIN_TIME && i.END_TIME == @item.END_TIME))
{
<span style="color:blue; font-weight:bold;">
<a href="javascript:void(GetCRNClassRoster('@Sitem.TERM_CODE','@Sitem.COURSE_CRN'));" class="link" title="Click to view class roster">
@Sitem.COURSE_CRN<br />
@Sitem.COURSE_CODE
</a><br />
@Sitem.COURSE_TITLE<br />
</span>
@Sitem.ROOM_CODE<br />
<span style="color:darkred; font-size:10px" class="sDate">
from @Sitem.START_DATE_CHAR to @Sitem.END_DATE_CHAR<br />
</span>
}
</td>
<td class="drop" id="@("Wed" + item.BEGIN_TIME+item.END_TIME)">
@foreach (var Sitem in Model.Schedule.Where(i => i.WED == "W" && i.BEGIN_TIME == @item.BEGIN_TIME && i.END_TIME == @item.END_TIME))
{
<span style="color:blue; font-weight:bold;">
<a href="javascript:void(GetCRNClassRoster('@Sitem.TERM_CODE','@Sitem.COURSE_CRN'));" class="link" title="Click to view class roster">
@Sitem.COURSE_CRN<br />
@Sitem.COURSE_CODE
</a><br />
@Sitem.COURSE_TITLE<br />
</span>
@Sitem.ROOM_CODE<br />
<span style="color:darkred; font-size:10px" class="sDate">
from @Sitem.START_DATE_CHAR to @Sitem.END_DATE_CHAR<br />
</span>
}
</td>
<td class="drop" id="@("Thu" + item.BEGIN_TIME+item.END_TIME)">
@foreach (var Sitem in Model.Schedule.Where(i => i.THU == "R" && i.BEGIN_TIME == @item.BEGIN_TIME && i.END_TIME == @item.END_TIME))
{
<span style="color:blue; font-weight:bold;">
<a href="javascript:void(GetCRNClassRoster('@Sitem.TERM_CODE','@Sitem.COURSE_CRN'));" class="link" title="Click to view class roster">
@Sitem.COURSE_CRN<br />
@Sitem.COURSE_CODE
</a><br />
@Sitem.COURSE_TITLE<br />
</span>
@Sitem.ROOM_CODE <br />
<span style="color:darkred; font-size:10px" class="sDate">
from @Sitem.START_DATE_CHAR to @Sitem.END_DATE_CHAR<br />
</span>
}
</td>
<td class="drop" id="@("Sat" + item.BEGIN_TIME+item.END_TIME)">
@foreach (var Sitem in Model.Schedule.Where(i => i.SAT == "S" && i.BEGIN_TIME == @item.BEGIN_TIME && i.END_TIME == @item.END_TIME))
{
<span style="color:blue; font-weight:bold;">
<a href="javascript:void(GetCRNClassRoster('@Sitem.TERM_CODE','@Sitem.COURSE_CRN'));" class="link" title="Click to view class roster">
@Sitem.COURSE_CRN<br />
@Sitem.COURSE_CODE
</a><br />
@Sitem.COURSE_TITLE<br />
</span>
@Sitem.ROOM_CODE <br />
<span style="color:darkred; font-size:10px" class="sDate">
from @Sitem.START_DATE_CHAR to @Sitem.END_DATE_CHAR<br />
</span>
}
</td>
</tr>
}
}
</table>
</div>
</div>
</div>
最佳答案
用你现在的<table>
布局,您可以使用 rowspan
<td>
的属性允许您的元素 Course
垂直向下延伸多行。
您当前在数据模型上使用多个查询的 View 代码难以阅读和测试,并且是重复代码。您应该首先创建 View 模型来表示您的显示,在您的情况下,这意味着一个表示表格单元格(包含要显示的 Course
的属性),一个表示表格行(单元格集合),一个表示表(行的集合)。
public class CourseVM // represents a table cell
{
public string Code { get; set; }
... // other properties of Course that will be displayed in the view
public int? TimeSlots { get; set; }
}
TimeSlot
属性(因为需要更好的名称)用于确定 Course
的行数(小时)向下延伸。
public class WeekVM // represents a table row
{
public WeekVM()
{
Days = new List<CourseVM>();
// Hard code for 1 week, but could add a parameter in the constructor to generate a variable number of days
for (int i = 0; i < 7; i++)
{
Days.Add(new CourseVM());
}
}
public List<CourseVM> Days { get; set; }
}
public class ScheduleVM // represents the table
{
public ScheduleVM(DateTime startDate, TimeSpan startTime, TimeSpan endTime)
{
StartDate = startDate.Date.Add(startTime);
TimeSlots = new List<WeekVM>();
// Assume 1 hour slots
int intervals = (int)((endTime - startTime).TotalMinutes) / 60;
for (int i = 0; i < intervals; i++)
{
TimeSlots.Add(new WeekVM());
}
}
public DateTime StartDate { get; set; }
public List<WeekVM> TimeSlots { get; set; }
}
然后在 Controller 中,初始化ScheduleVM
的新实例并根据您收集的 Course
设置其属性
// Set parameters (these may come from parameters in the method
DateTime startDate = new DateTime(2017, 1, 22);
TimeSpan startTime = new TimeSpan(9, 0, 0);
TimeSpan endTime = new TimeSpan(16, 0, 0);
// Get collection of data model
IEnumerable<Course> courses = db.Courses.Where(...);
// Initialize view model
ScheduleVM model = new ScheduleVM(startDate, startTime, endTime);
foreach(Course course in courses)
{
// Get row and column indexes of the table where this instance needs to be displayed
int dayIndex = (int)course.StartTime.DayOfWeek;
int slotIndex = course.StartTime.Hour - startTime.Hours;
// Determine how any rows this needs to span over
int timeSlots = (course.EndTime - course.StartTime).Hours;
// Set view model properties
var courseVM = model.TimeSlots[slotIndex].Days[dayIndex];
courseVM.Code = course.Code;
courseVM.Title = course.Title;
courseVM.TimeSlots = timeSlots;
for (int i = 1; i < timeSlots; i++)
{
slotIndex++;
model.TimeSlots[slotIndex].Days[dayIndex].TimeSlots = 0;
}
}
return View(model);
注意对于 rowspan
工作,后续行需要省略相应的 <td>
如果上方的单元格延伸到其中,则为元素。在上面的代码中,if
block 设置 TimeSlots
值 0
在后续行中,以便可以在 View 中有条件地检查它。然后 View 是
@model ScheduleVM
....
<table>
<thead>
<tr>
<th></th>
@for(int i = 0; i < 7; i++)
{
<th>@Model.StartDate.AddDays(i).DayOfWeek</th>
}
</tr>
</thead>
<tbody>
@foreach(var timeSlot in Model.TimeSlots)
{
<tr>
<td>@Model.StartDate.AddHours(rowIndex).ToString("hh:mm tt")</td>
@foreach(var course in timeSlot.Days)
{
if (!course.TimeSlots.HasValue)
{
<td></td>
}
else if (course.TimeSlots > 0)
{
<td rowspan="@course.TimeSlots">
<div class="course">
<div>@course.Code</div>
.... // other properties of course
</div>
</td>
}
}
</tr>
rowIndex++;
}
</tbody>
</table>
然后你只需要一点 css 来设置它的样式。
关于javascript - 设计时间表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41870835/
我有以下格式的一些数据: 薪水 代码及时 1690 09:03:00 1690 09:13:00 1690 09:07:00 1691 08:48:00 1691 08:52:00 1691 08:5
在基于 jsp 和 servelet 的 Web 应用程序中实现类似 cron 的调度程序的最佳方法是什么?使用“定时器服务”遇到了一个选项。任何其他替代方案或对计时器服务的任何评论? 提前致谢 沙米
好吧,我对 MySQL 和数据库总体来说还很陌生。我想在一段时间后对数据库进行更新。让我解释一下。 所以为了练习,我正在用 php 构建一个游戏,在这个游戏中你将能够升级东西。比如说一栋建筑,从1级升
我想为每个用户创建一个典型的学校时间表。 最终产品应如下所示: +----+---------+---------+-----------+----------+--------+ | h | Mo
我的表格: timetable +----+---------+-------+--------+---------+---------+------+ | id | user_id | s_day
我的网站涉及安排重复类(class)和事件。目前,我已经使用 php 和 javascript 构建了一个表,该表逐个时间段扫描我的 mysql 数据库,每天查看是否有安排的事件或时间段是否空闲。 它
我有一个关于日程安排的问题。我需要为约会制作一个时间表生成器。这是目前的情况。 P1 与 P2 有约会 A。 P3和P4有个约会B。 等等…… 预约 A 大约需要 15 分钟 B约需40分钟 (时长视
我有一个配置如下的 celery 时间表: CELERYBEAT_SCHEDULE = { "runs-every-30-seconds": { "task": "tasks.
我想在“每个月的最后一天 10:15”和“每个月的第一个星期日”运行 spring scheduler 作业 - 我在下面尝试过 - 但它在初始化 spring 上下文时出错: org.springf
如何在运行时检查 openmp 计划? 我使用并行循环和运行时计划编译我的代码 #pragma omp parallel for schedule(runtime) collapse(2) for(j
我已经制作了一个 Android 应用程序,并且它已成功编译,没有任何错误。但是当我在 Android 手机中运行应用程序时,它不会显示所需的输出。 这是我的 MainActivity.java: p
经过一天的痛苦,我终于将数据放入了日程安排事件中。 我现在尝试在单击事件时设置事件,它使用数据变量加载新页面。 这是 xhtml 还有 Java public void redirec
我正在使用 Primefaces Schedule 组件在我的网络应用程序中呈现事件。但我需要对他耍点小花招。对于每个呈现的事件,我需要显示一个包含事件详细信息的工具提示。使用 window.onlo
我想设置一个 crontab 表达式,每 20 分钟启动一次作业,并且它将按照时间表运行 周一至周五上午 7 点至 30 点至晚上 8 点,周六上午 7 点至 30 点至下午 4 点 到目前为止我有以
这是我根据用户输入创建表格的代码: const err = "the valid input is a number between 5 and 20, please refresh your pag
有没有办法在 HighCharts 中制作与此类似的时间线/时间表? https://developers.google.com/chart/interactive/docs/gallery/time
在关于 AES key 表的教程中,我看到 key 表的操作(旋转、rcon、s-box)应用于一个 4 字节的字。你能解释一下这个字从哪里来吗?我明白我从 128 位长的 key 中提取它。 key
SQL Server 作业/时间表 - 美国与英国夏令时调整 我们有一个基于英国的服务器,它需要在 16:30(美国中部时间 - 这可能看起来很奇怪,但这是因为一些数据的可用性)运行 SQL 代理作业
我有一个 quartz 作业,每天下午 3 点(服务器时间)运行。我想做的是让它在下午 3 点运行,但针对美国的每个时区。 quartz 作业会触发一封电子邮件给我的用户,我希望每个人都能在他们的时间
我想以一种非常简单的方式展示电视指南时间线,但我对此真的很陌生,所以我希望有人可以帮助我,我不想要太复杂的东西,而且我已经在网络上搜索并且我发现非常复杂的时间线,有很多我真的不需要的功能,我只想显示当
我是一名优秀的程序员,十分优秀!