Спойлерами называют элементы дизайна, которые позволяют скрывать часть содержимого и раскрывать его "по запросу".
Пусть в отчете выводится список групп, а по клику на символ + рядом с названием группы выводится список ее участников.
Отчет со спойлером в интерфейсе пользователя.
В дизайнере отчетов необходима группировка по названию группы. Для вывода символа свернутой/развернутой группы можно использовать элемент управления "флажок" (CheckBox). По умолчанию он отображается в виде галочки, но можно заменить его свойства CheckedSymbol и UncheckedSymbol на плюс и минус соответственно.
Отчет со спойлером в дизайнере отчетов.
Также для флажка нужно настроить гиперссылку — при обработке клика по флажку из нее можно будет получить ID выбранной группы.
Свойство Hyperlink для элемента CheckBox1.
Также необходимо настроить автоматизацию: для заголовка группы — обработку события BeforePrint, а для флажка — события Click:
public class ReportScript
{
private void GroupHeader1_BeforePrint(object sender, EventArgs e)
{
string groupId = ToString((Int32)Report.GetColumnValue("Table.GroupID"));
bool groupVisible = expandedGroups.Contains(groupId); // Получаем Id группы
Data1.Visible = groupVisible; // Устанавливаем видимость данных в соответствии с видимостью группы
CheckBox1.Checked = !groupVisible; // Устанавливаем состояние флажка в зависимости от видимости группы
}
private List<string> expandedGroups = new List<string>();
private void CheckBox1_Click(object sender, EventArgs e)
{
string groupId = (sender as CheckBoxObject).Hyperlink.Value; // Получаем Id группы из гиперссылки
if (expandedGroups.Contains(groupId)) // Если список видимых групп содержит выбранную группу
expandedGroups.Remove(groupId); // То удалить из списка видимых групп выбранную
else
expandedGroups.Add(groupId); // Иначе добавить группу в список видимых
Report.Refresh(); // Обновить отчет
}
}
При сворачивании и разворачивании группы отчет полностью обновляется. На больших объемах данных обновление может выполняться долго. Поэтому использовать спойлеры имеет смысл для небольших объемов данных. |
---|