[ELMA3] Использование в отчетах раскрывающихся блоков (катов)
Удобное представление большого объема информации – важная задача проектирования интерфейса. В этой статье будет описано использование раскрывающихся блоков (катов) с помощью .NET Razor. Более подробно о создании отчетов можно узнать здесь.
Для начала работы, на странице Вашего отчета Настройки отображения, в разделе Макет отчета, необходимо выбрать .NET Razor и перейти к вкладке. Откроется пустой лист для разметки. Нет необходимости все делать вручную, на верхней панели находится Мастер шаблона (подробней о использовании мастера можно узнать в справке), с помощью которого будет сгенерирован базовый код макета, который будет выглядеть примерно следующим образом:
Раскрывающиеся блоки (каты)
Скроем некоторую информацию в раскрывающийся блок (кат).
Сперва необходимо подключить пространство имен:
@using EleWise.ELMA.Web.Mvc.Models.Panels
А затем конструкцию:
@using (Html.CollapsiblePanel(new CollapsiblePanel { Header = "Подробнее", Expanded = false, Id = "CommentsFromCollapsiblePanel" + i.ToString(), PlusMinus = true, SaveState = false })) { using (Html.ElmaForm()) { } }
Между {} будет находиться то, что необходимо скрыть. Внутри можно использовать стандартные html теги, например, <p></p> или <div></div>. В строке Header = "Подробнее" – название раскрывающегося блока. Конструкцию необходимо вставлять внутри цикла @foreach.
Для того, чтобы раскрывающийся блок был у каждой записи необходим счетчик. Нужно объявить переменную непосредственно перед циклом @foreach:
@{int i=0;}
Внутри цикла необходимо увеличивать счетчик: i++;
Целиком код будет выглядеть следующим образом:
@using EleWise.ELMA.BPM.Web.Reports.Extensions @using System.Data @using EleWise.ELMA.Web.Mvc.Html @model EleWise.ELMA.BPM.Web.Reports.Models.ReportParametersInfo @using EleWise.ELMA.Web.Mvc.Models.Panels @{ //Получение источника данных по имени var data = Model.DataSources["Данные"]; //Выполнение HQL или SQL запроса, содержащегося внутри источника данных, и получение результата DataTable items = data.Get(); } <style> .list th { background: none repeat scroll 0 0 #666666; color: #FFFFFF; padding: 5px; text-align: left; } .list td { border-bottom: 1px solid #CCCCCC; padding: 3px 5px; vertical-align: middle; } </style> <div> <p style="font-size:20px; text-align:center;"></p> @* Включает постраничное отображение источника данных *@ @(Html.Pager(Model, data)) @* Заголовки колонок отчета. Название колонок берутся из названий столбцов таблицы, содержащей результат выполнение источника данных *@ <table class="list" width="100%" style="margin-top: 10px; font-size: 11px;"> <tr> <th scope="col">Наименование</th> </tr> @{int i=0;} @* Результат выполнения источника данных представляет собой таблицу. Пробегаемся по строкам таблицы и отображаем значение столбцов *@ @foreach (DataRow row in items.Rows) { i++; <tr valign="top"> <td > @row["Name"] @using (Html.CollapsiblePanel(new CollapsiblePanel { Header = "Подробнее", Expanded = false, Id = "CommentsFromCollapsiblePanel" + i.ToString(), PlusMinus = true, SaveState = false })) { using (Html.ElmaForm()) { <p>Автор: @Url.EntityLink(row,typeof(EleWise.ELMA.Security.Models.IUser),"AuthorID","UsFullName",true)</p> <p>Исполнитель: @Url.EntityLink(row,typeof(EleWise.ELMA.Security.Models.IUser),"Executor","FullName",true)</p> <p>Дата завершения: @row["EDate"]</p> <p><a href="/Tasks/Task/Execute/@row["Id"].ToString()">Перейти к задаче</a></p> } } </td> </tr> } </table> </div>
А отчет будет выглядеть так:
Для более четкого выделения раскрывающегося блока, его можно поместить в теги <div></div> с указанием необходимых параметров.
В качестве примера был добавлен новый стиль для тега <div> в стилях <style></style>:
.brd { border: 1px solid #CCCCCC; background: #D6E5F3; color: black; font-size: 9px; }
В итоге код выглядит примерно следующим образом:
<div class="brd"> @using (Html.CollapsiblePanel(new CollapsiblePanel { Header = "Подробнее", Expanded = false, Id = "CommentsFromCollapsiblePanel" + i.ToString(), PlusMinus = true, SaveState = false })) { using (Html.ElmaForm()) { <p>Автор: @Url.EntityLink(row,typeof(EleWise.ELMA.Security.Models.IUser),"AuthorID","UsFullName",true)</p> <p>Исполнитель: @Url.EntityLink(row,typeof(EleWise.ELMA.Security.Models.IUser),"Executor","FullName",true)</p> <p>Дата завершения: @row["EDate"]</p> <p><a href="/Tasks/Task/Execute/@row["Id"].ToString()">Перейти к задаче</a></p> } } </div>
Итоговый вариант отчета с раскрывающимся блоком выглядит следующим образом: