Страница 1 из 1
Не отображается датабэнд если нет данных в источнике данных
Добавлено: 10 янв 2017, 10:06
aquilax
Подскажите, есть ли простой стандартный способ показать, что данных нет в источнике данных?
У меня отчет состоит из databend, у которого указан источник данных - выборка значений из базы. Если данных нет, то весь датабэнд не отображается, а мне нужно вывести хотя бы сообщение о том, что данных нет
Спасибо!
Re: Не отображается датабэнд если нет данных в источнике дан
Добавлено: 11 янв 2017, 15:51
Леонид
Добрый день!
Есть много способов это сделать. На практике, мы, например это не используем, т.к. отчётов более около 400-сот и пользователю совершенно ясно, что пустой лист == нет данных.
Тем не менее.
Предположим у нас есть такой select (Oracle):
Код: Выделить всё
SELECT 777 as Id,
'Peter' as Name
FROM DUAL
Тогда в коде события BeginRender() отчёта вам нужно написать примерно следующее:
Код: Выделить всё
DataSource1.Connect(); // эта строка нужна, если у вас в DataSource1 флажок ConnectOnStart = False
if (DataSource1.Rows.Count == 0 || (DataSource1.ID == null && string.IsNullOrEmpty(DataSource1.NAME)))
MessageBox.Show("Нет данных");
Или (2-й вариант) если хотите показать это в отчёте, то тогда, можно, создать второй DataBand (DataBand2 например), ниже первого, у которого установить (Double Click) Count data = 1, на нём создать StiText со строкой "Нет данных" по центру (или растянуть и поставить выравнивание по центру, что корректнее), поставив у него свойство Enabled = False.
Затем в коде события BeginRender() меняем код на такой:
Код: Выделить всё
if (DataSource1.Rows.Count == 0 || (DataSource1.ID == null && string.IsNullOrEmpty(DataSource1.NAME)))
DataBand2.Enabled = true;
Вариантов, на самом деле масса. Пробуйте.
Re: Не отображается датабэнд если нет данных в источнике дан
Добавлено: 11 янв 2017, 17:17
aquilax
Спасибо за ответ!
На самом деле пробуем по типу варианта 2, только второй датабэнд устанавливаем сверху. Привязываем к нему новый источник данных, который состоит из простого запроса - считает количество строк при таких же условиях запроса, как в первом источнике данных. То есть содержимое этого источника данных есть всегда, может быть 0, может быть другое число. Добавляем объект "Текст" в новый датабэнд с содержимым:
{IIF(count.C==0,"В базе нет данных за указанный период времени!","")}
И у нас всё работает в версии .Net. Но мы запускаем этот отчет в версии .PHP в веб-браузере, и это не работает! Абсолютно пустой отчет, не показывает ни одного бэнда. Интересно почему так? Уже поразному пробовали крутить "вариант 2".
А события у нас не поддерживаются, поэтому мы не можем использовать вариант 1.
Re: Не отображается датабэнд если нет данных в источнике дан
Добавлено: 11 янв 2017, 17:25
Леонид
Здесь сложно сказать, это нужен простой пример, чтобы разработчики посмотрели.
Могу предложить две идеи. Попробовать использовать тернарную операцию вместо IIF, т.е. меняете
Код: Выделить всё
{IIF(count.C==0,"В базе нет данных за указанный период времени!","")}
на
Код: Выделить всё
{count.C == 0 ? "В базе нет данных за указанный период времени!" : string.Empty}
Если это не поможет, то попробуйте вместо DataBand2 использовать что-то другое, например, второй ReportTitle, т.к. DataBand всё-таки требует какой-нибудь Data count отличный от нуля.
P.S. Забыл спросить, а почему вы используете второй запрос, DataSource1.Rows.Count == 0 не работает?
Re: Не отображается датабэнд если нет данных в источнике дан
Добавлено: 11 янв 2017, 17:43
aquilax
Title использовали как раз - тоже самое, не отображается.
В Net - отображается, в PHP нет...
следующим шагом попробуем тернарную операцию - спасибо за подсказку.
На счет вопроса, почему мы используем второй запрос - что-то не поняла смысл вопроса, сорри... (DataSource1.Rows.Count == 0 -?)
Re: Не отображается датабэнд если нет данных в источнике дан
Добавлено: 11 янв 2017, 17:55
Леонид
На счет вопроса, почему мы используем второй запрос - что-то не поняла смысл вопроса, сорри... (DataSource1.Rows.Count == 0 -?)
Это я к тому, что почему бы вместо запроса не узнавать Count у источника данных просто так DataSource1.Rows.Count == 0, а не дёргать вторым запросом сервер лишний раз, тем более, если запрос "тяжеловесный".
Re: Не отображается датабэнд если нет данных в источнике дан
Добавлено: 12 янв 2017, 17:00
aquilax
А где в отчете можно это выражение написать: "DataSource1.Rows.Count == 0" ? - Мы просто сначала пишем в версии .Net, но проект должен быть совместим c PHP версией. А там не поддерживаются события...
Re: Не отображается датабэнд если нет данных в источнике дан
Добавлено: 15 янв 2017, 13:01
Aleksey
Здравствуйте,
Как вариант, попробуйте задать данное условие в Condition для дополнительного бэнда, и выключить опцию "Component Is Enabled".
Спасибо.