Динамическое изменение элементов. События.

Обсуждение Stimulsoft Reports.NET
Ответить
MaximRu
Сообщения: 2
Зарегистрирован: 10 мар 2016, 17:05

Динамическое изменение элементов. События.

Сообщение MaximRu »

Здравствуйте.
По задаче нужно скрывать некоторые поля в отчете (в зависимости от bool переменной). Проблема в том, что если скрывать эти поля через "Условие", то вместо них остается пустое место. Т.е. оставшиеся поля нужно сдвинуть выше. Пробовал добавить код в события "Перед печатью", но код не срабатывает. Часть отчета прилагаю во вложении. Что неправильно в коде? Или может можно сдвигать поля динамически другим способом?
---
GroupBand - пробовали, не подходит. Код события в элементе Text16.
Вложения
Образец
Образец
TempReport.png (8.29 КБ) 3096 просмотров
TempReport.mrt
Отчет
(56.31 КБ) 303 скачивания
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Динамическое изменение элементов. События.

Сообщение HighAley »

Здравствуйте.

Обычно в таких случая мы рекомендует добавить Панель с включенным свойством Can Shrink.
На неё класть компоненты, которые могут скрываться по условию. Если их нет, то панель будет уменьшаться и все компоненты ниже будут тоже сдвигаться.

Спасибо.
MaximRu
Сообщения: 2
Зарегистрирован: 10 мар 2016, 17:05

Re: Динамическое изменение элементов. События.

Сообщение MaximRu »

Здравствуйте.
Даже при добавлении элементов в две разные панели, при скрытии 1-ой панели, все равно остается пустое место. Может это быть связанно с тем, что панели находятся в DataBand? У DataBand также стоит свойство Can Shrink.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

Re: Динамическое изменение элементов. События.

Сообщение Леонид »

Добрый день!

Могу предложить немного другой вариант решения, без CanShrink.

1) Создаём 3 панели;
2) На Panel1 кладём верхние контролы, на Panel2 только текст (SubTest), и на Panel3 оставшиеся;
3) Устанавливаем свойство DockStyle у всех трёх панелей в Top;
4) В событии BeforePrint компонента DataBand пишем для теста такой код:[/list]

Код: Выделить всё

if (true) // if (!RoleDataModel.IsPrintSubSystemName)
{
  Text2.Height = 0;
  Panel2.Height = 0;
}
Что это даст? Как раз то, что вы и хотели, по условию будет скрываться средняя (Panel2) и контролы так же нужно скрывать, а нужны эти панельки для того, чтобы они шли друг за другом, используя DockStyle == Top.

Рабочий пример во вложении.

P.S. Забыл сказать. Можно так же в том же событии BeforePrint добавить "раскраску" текста, а Conditions убрать.
То есть, в вашем случае это будет так:

Код: Выделить всё

if (!RoleDataModel.IsPrintSubSystemName)
{
Stimulsoft.Base.Drawing.StiSolidBrush textBrush = new Stimulsoft.Base.Drawing.StiSolidBrush(System.Drawing.Color.Red);

  Text30.TextBrush = textBrush;
  Text47.TextBrush = textBrush;
  Text31.TextBrush = textBrush;
  ... // перечислить остальные контролы
  Text99.TextBrush = textBrush;
}
Вложения
TempReport_sample.mrt
(31.38 КБ) 325 скачиваний
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Динамическое изменение элементов. События.

Сообщение HighAley »

Здравствуйте.

Надо скрывать не сами панели, а их содержимое, тогда панели изменят свою высоту и всё остальное содержимое сдвинется.
Расположение компонентов изменяется, если изменяется высота других компонентов в ту или иную сторону, но не тогда, когда они скрываются по условию.

Спасибо.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

Re: Динамическое изменение элементов. События.

Сообщение Леонид »

Надо скрывать не сами панели, а их содержимое, тогда панели изменят свою высоту и всё остальное содержимое сдвинется.
Согласен, можно и так, в этом случае, можно установить флажок CanShrink у Panel2, а в коде писать:

Код: Выделить всё

if (true) // if (!RoleDataModel.IsPrintSubSystemName)
{
  Text2.Height = 0;
}
То есть, в этом случае строка

Код: Выделить всё

Panel2.Height = 0; 
не нужна.
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Динамическое изменение элементов. События.

Сообщение HighAley »

Здравствуйте.

Не надо никакого дополнительного кода, я забыл один важный момент.
Свойство Shift Mode панели, которая должна подниматься, должно быть установлено в значение Increasing Size, Decreasing Size
Report.mrt
(7.02 КБ) 341 скачивание
Спасибо.
Ответить