Страница 1 из 1

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

Добавлено: 10 мар 2016, 17:31
MaximRu
Здравствуйте.
По задаче нужно скрывать некоторые поля в отчете (в зависимости от bool переменной). Проблема в том, что если скрывать эти поля через "Условие", то вместо них остается пустое место. Т.е. оставшиеся поля нужно сдвинуть выше. Пробовал добавить код в события "Перед печатью", но код не срабатывает. Часть отчета прилагаю во вложении. Что неправильно в коде? Или может можно сдвигать поля динамически другим способом?
---
GroupBand - пробовали, не подходит. Код события в элементе Text16.

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

Добавлено: 11 мар 2016, 15:20
HighAley
Здравствуйте.

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

Спасибо.

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

Добавлено: 15 мар 2016, 08:17
MaximRu
Здравствуйте.
Даже при добавлении элементов в две разные панели, при скрытии 1-ой панели, все равно остается пустое место. Может это быть связанно с тем, что панели находятся в DataBand? У DataBand также стоит свойство Can Shrink.

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

Добавлено: 15 мар 2016, 12:07
Леонид
Добрый день!

Могу предложить немного другой вариант решения, без 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;
}

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

Добавлено: 15 мар 2016, 15:34
HighAley
Здравствуйте.

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

Спасибо.

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

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

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

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

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

Panel2.Height = 0; 
не нужна.

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

Добавлено: 16 мар 2016, 09:10
HighAley
Здравствуйте.

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