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

"GetTotal2" ????

Добавлено: 11 окт 2008, 15:51
Валерий В. Шинкевич
Пишу в обработчике события BeginRender страницы:

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

Страница2.Enabled = (Totals.Sum(Данные2, this, "Lots.Number") != 0);
В коде появляется:

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

public void Страница2_BeginRender(object sender, System.EventArgs e)
        {
            Страница2.Enabled = (Totals.Sum(Данные2, this, "GetTotal2", "Lots.Number") != 0);
        }
почему?

PS: Спросите - почему Sum, а не Count ? - а Count выдает количество строк в источнике данных (т.е. всего) а не тех строк, которые попадают под условие в Данные2

"GetTotal2" ????

Добавлено: 11 окт 2008, 16:05
Vital
Здравствуйте,

Генератор отчетов меняет текст метода для того, чтобы иметь возможность вычислить выражение. Выражение выделается в отдельный метод - "GetTotal2". В вашем случае выражением является строка "Lots.Number". А должно быть Lots.Number != 0.

Спасибо.

"GetTotal2" ????

Добавлено: 11 окт 2008, 17:10
Валерий В. Шинкевич
Vital писал(а):Здравствуйте,

Генератор отчетов меняет текст метода для того, чтобы иметь возможность вычислить выражение. Выражение выделается в отдельный метод - "GetTotal2". В вашем случае выражением является строка "Lots.Number". А должно быть Lots.Number != 0.
Ну, в моём случае, должно быть именно то, что я написал - если сумма Lots.Number не равна нулю, то страница должна быть включена, иначе её не надо выводить.
И проверка Lots.Number != 0 в таком случае бессмысленна.


"GetTotal2" ????

Добавлено: 11 окт 2008, 17:31
Валерий В. Шинкевич
Вообще, хотелось бы рецепты для таких случаев:

1. Выводить страницу если в источнике есть данные. Актуально ли это ?
2. Выводить страницу только если в датабенде выводится хоть одна строка. (в зависимости от условий в фильтрах датабенда)
3. При нескольких датабендах на странице выводить страницу если хотя бы в одном датабенде выводится хотя бы одна строка. (также в зависимости от условий в фильтрах датабенда)

"GetTotal2" ????

Добавлено: 11 окт 2008, 21:43
Vital
Здравствуйте,
wash_ai писал(а):
Vital писал(а):Здравствуйте,

Генератор отчетов меняет текст метода для того, чтобы иметь возможность вычислить выражение. Выражение выделается в отдельный метод - "GetTotal2". В вашем случае выражением является строка "Lots.Number". А должно быть Lots.Number != 0.
Ну, в моём случае, должно быть именно то, что я написал - если сумма Lots.Number не равна нулю, то страница должна быть включена, иначе её не надо выводить.
И проверка Lots.Number != 0 в таком случае бессмысленна.
Я имел ввиду, что у Вас выражение является строкой, не ссылкой на поле.

Спасибо.

"GetTotal2" ????

Добавлено: 11 окт 2008, 21:46
Vital
Здравсвуйте,
wash_ai писал(а):Вообще, хотелось бы рецепты для таких случаев:

1. Выводить страницу если в источнике есть данные. Актуально ли это ?
2. Выводить страницу только если в датабенде выводится хоть одна строка. (в зависимости от условий в фильтрах датабенда)
3. При нескольких датабендах на странице выводить страницу если хотя бы в одном датабенде выводится хотя бы одна строка. (также в зависимости от условий в фильтрах датабенда)
Ответ на эти вопросы есть в топике, ссылку на который Вы привели. Все это реализуется сейчас в скрипте.

Спасибо.

"GetTotal2" ????

Добавлено: 12 окт 2008, 07:45
Валерий В. Шинкевич
Vital писал(а): Ответ на эти вопросы есть в топике, ссылку на который Вы привели. Все это реализуется сейчас в скрипте.
В топике есть только ответ на первый вопрос. Когда выводится если в источнике есть строки.

Что делать когда, например, в DataSource 100 строк, а в датабенд1 (с учетом фильтров) на Page2 попадает только 10 записей,
а у ДатаБенд3 на Page3 условию фильтра не соответствует ни одной строки и эту страницу вообще не надо выводить ???
Есть ли простое решение ?


"GetTotal2" ????

Добавлено: 17 окт 2008, 09:51
Edward
Здравствуйте.
wash_ai писал(а):В топике есть только ответ на первый вопрос. Когда выводится если в источнике есть строки.
Что делать когда, например, в DataSource 100 строк, а в датабенд1 (с учетом фильтров) на Page2 попадает только 10 записей,
а у ДатаБенд3 на Page3 условию фильтра не соответствует ни одной строки и эту страницу вообще не надо выводить ???
Есть ли простое решение ?
Самое простое решение - это разместить 3 датабэнда на самой первой странице. Установить у них у всех высоту в 0 и фильтры соответсвенно. Для всех последующих страниц установить Enabled = false. В BeforePrintEvent каждого бэнда написать следующий код:

Page2.Enabled = true

Т.е. если фильтр позволит вызваться BeforePrint хотя бы раз, то соответсвующая страница включится.

Спасибо.