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