logo

[ELMA3] Использование в отчетах раскрывающихся блоков (катов)

Удобное представление большого объема информации – важная задача проектирования интерфейса. В этой статье будет описано использование раскрывающихся блоков (катов) с помощью .NET Razor. Более подробно о создании отчетов можно узнать здесь.

Для начала работы, на странице Вашего отчета Настройки отображения, в разделе Макет отчета, необходимо выбрать .NET Razor и перейти к вкладке. Откроется пустой лист для разметки. Нет необходимости все делать вручную, на верхней панели находится Мастер шаблона (подробней о использовании мастера можно узнать в справке), с помощью которого будет сгенерирован базовый код макета, который будет выглядеть примерно следующим образом:

Раскрывающиеся блоки (каты)

Скроем некоторую информацию в раскрывающийся блок (кат).

Сперва необходимо подключить пространство имен:

1
@using EleWise.ELMA.Web.Mvc.Models.Panels

А затем конструкцию:

1
2
3
4
5
6
7
8
9
10
11
12
13
@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++;

Целиком код будет выглядеть следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
@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>:

1
2
3
4
5
6
.brd {
    border: 1px solid #CCCCCC;
    background: #D6E5F3;
    color: black;
    font-size: 9px;
   }

В итоге код выглядит примерно следующим образом:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<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>

Итоговый вариант отчета с раскрывающимся блоком выглядит следующим образом: