Страница 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 хотя бы раз, то соответсвующая страница включится.
Спасибо.