Show/Hide Toolbars

Методические рекомендации по настройке системы "Первая Форма"



Спойлерами называют элементы дизайна, которые позволяют скрывать часть содержимого и раскрывать его "по запросу".  

Пусть в отчете выводится список групп, а по клику на символ + рядом с названием группы выводится список ее участников.

fr_tips_spoiler_1

Отчет со спойлером в интерфейсе пользователя.

В дизайнере отчетов необходима группировка по названию группы. Для вывода символа свернутой/развернутой группы можно использовать элемент управления "флажок" (CheckBox). По умолчанию он отображается в виде галочки, но можно заменить его свойства CheckedSymbol  и UncheckedSymbol на плюс и минус соответственно.

fr_tips_spoiler_3

Отчет со спойлером в дизайнере отчетов.

Также для флажка нужно настроить гиперссылку - при обработке клика по флажку из нее можно будет получить ID выбранной группы.

fr_tips_spoiler_2

Свойство 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();                                             // Обновить отчет
  }
}

!warning При сворачивании и разворачивании группы отчет полностью обновляется. На больших объемах данных обновление может выполняться долго. Поэтому использовать спойлеры имеет смысл для небольших объемов данных.