0
Может ли кто-нибудь помочь мне в разработке расписания студента? Нижеследующие данные скриншотов извлекаются из базы данных в 2 Модели, первая модель имеет отличный start_time и end_time для этого ученика, а вторая модель имеет start_time, end_time и данные курса, в представлении я запускаю цикл по каждому элементу модели 1 и другим внутренним петлям для каждого дня в модели2, см. ниже кодРасчетное расписание
Вопрос: Я хочу организовать расписание, такое же, как календарь перспективы (изображение 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>
Первое, что вам нужно - это модель представления для представления того, что вы хотите отобразить. Если будет содержать свойство коллекции (например, «Список » для каждого (скажем) 30-минутного периода, который представляет строки таблицы. «TimeSlotVM» будет содержать свойство коллекции (например, «Список») для представления дней, а «DayVM» будет содержат свойства для курса и т. д. и свойство 'int', представляющее продолжительность в 30-минутные периоды.Тогда это просто вложенный цикл foreach, а свойство duration используется для установки атрибута 'rowspan'. –
@StephenMuecke создайте идею, я дам попробовать, единственная проблема - это может замедлить ответ запроса базы данных. – AbuYazan
Не имеет значения для всех запросов, которые вы используете в представлении (что является плохой практикой). Не обман, но посмотрите на [этот ответ] (http://stackoverflow.com/questions/29626914/how-to-represent-a-monthof-checkboxes-in-an-mvc-model/29627829#29627829) для примера, как выглядит модель и представление (в этом случае «DayVM» имеет свойства для отображения сведений о вашем курсе и свойства для количества периодов, которые могут использоваться в вложенном цикле для установки «rowspan» элемент '
ответ
С текущего
<table>
макета, вы можете использовать атрибут<td>
элементовrowspan
, чтобы позволить вашемуCourse
продлить вниз несколько строк по вертикали.Ваш текущий код просмотра, использующий несколько запросов в вашей модели данных, трудно читать и проверять и дублирует код. Вы должны начать с создания моделей представления для представления вашего дисплея, что в вашем случае означает, что вы представляете ячейку таблицы (содержащую свойства
Course
, которые вы хотите отобразить), один из которых представляет собой таблицу (коллекцию ячеек) и одну, представляющую таблицу (сбор строк).Свойство
TimeSlot
(за неимением лучшего названия) используется для определения количества строк (часов), чтоCourse
проходит вниз.Затем в контроллере, инициализировать новый экземпляр
ScheduleVM
и установить его свойства на основе вами коллекцииCourse
Обратите внимание, что для
rowspan
на работу, последующие строки должны опустить соответствующие<td>
если клетка выше в нее. В приведенном выше коде блокif
устанавливает значениеTimeSlots
в0
в последующих строках, чтобы его можно было условно проверить в представлении. Затем открывается видДля этого вам просто нужно немного css, чтобы создать его.
источник
2017-01-28 02:09:26
еще один запрос, я застрял в изменении Timeslot до 30-минутного интервала, не могли бы вы, если возможно, обновить скрипку. – AbuYazan
Обновит скрипку завтра. –
@AbuYazan Я обновил код, чтобы разрешить любой интервал (жестко закодированный до 30 минут на скрипке). Но учтите, что если вы укажете (скажем) 60-минутные интервалы, он ожидает, что время начала и окончания также будет на 60-минутных интервалах (поэтому, если у вас было начальное время 9.30 и задано 60-минутные интервалы, оно будет начинаться с 9.00.) Также обратите внимание, что это не удастся, если у вас есть какие-то совпадающие времена (но это не имеет смысла в любом случае, и я предполагаю, что у вас есть проверки чтобы убедиться, что их нет) –
Полный календарь (https://fullcalendar.io/) день вид, что вы ищете здесь.
Библиотека очень расширяема, и я использую ее постоянно.
источник
2017-01-26 10:20:04
Я пробовал использовать полный календарь, он нуждается в большой настройке, так как расписание не является реальным календарем, а фиксированной еженедельной таблицей. будет ли какое-либо другое предложение использовать петли и css – AbuYazan
Смежные вопросы