Не отображается датабэнд если нет данных в источнике данных

Обсуждение Stimulsoft Reports.NET
Ответить
aquilax
Сообщения: 78
Зарегистрирован: 19 май 2016, 16:17

Не отображается датабэнд если нет данных в источнике данных

Сообщение aquilax »

Подскажите, есть ли простой стандартный способ показать, что данных нет в источнике данных?
У меня отчет состоит из databend, у которого указан источник данных - выборка значений из базы. Если данных нет, то весь датабэнд не отображается, а мне нужно вывести хотя бы сообщение о том, что данных нет
Спасибо!
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

Re: Не отображается датабэнд если нет данных в источнике дан

Сообщение Леонид »

Добрый день!

Есть много способов это сделать. На практике, мы, например это не используем, т.к. отчётов более около 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;
Вариантов, на самом деле масса. Пробуйте.
aquilax
Сообщения: 78
Зарегистрирован: 19 май 2016, 16:17

Re: Не отображается датабэнд если нет данных в источнике дан

Сообщение aquilax »

Спасибо за ответ!
На самом деле пробуем по типу варианта 2, только второй датабэнд устанавливаем сверху. Привязываем к нему новый источник данных, который состоит из простого запроса - считает количество строк при таких же условиях запроса, как в первом источнике данных. То есть содержимое этого источника данных есть всегда, может быть 0, может быть другое число. Добавляем объект "Текст" в новый датабэнд с содержимым:
{IIF(count.C==0,"В базе нет данных за указанный период времени!","")}
И у нас всё работает в версии .Net. Но мы запускаем этот отчет в версии .PHP в веб-браузере, и это не работает! Абсолютно пустой отчет, не показывает ни одного бэнда. Интересно почему так? Уже поразному пробовали крутить "вариант 2".

А события у нас не поддерживаются, поэтому мы не можем использовать вариант 1.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

Re: Не отображается датабэнд если нет данных в источнике дан

Сообщение Леонид »

Здесь сложно сказать, это нужен простой пример, чтобы разработчики посмотрели.

Могу предложить две идеи. Попробовать использовать тернарную операцию вместо IIF, т.е. меняете

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

{IIF(count.C==0,"В базе нет данных за указанный период времени!","")}
на

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

{count.C == 0 ? "В базе нет данных за указанный период времени!" : string.Empty}
Если это не поможет, то попробуйте вместо DataBand2 использовать что-то другое, например, второй ReportTitle, т.к. DataBand всё-таки требует какой-нибудь Data count отличный от нуля.

P.S. Забыл спросить, а почему вы используете второй запрос, DataSource1.Rows.Count == 0 не работает?
aquilax
Сообщения: 78
Зарегистрирован: 19 май 2016, 16:17

Re: Не отображается датабэнд если нет данных в источнике дан

Сообщение aquilax »

Title использовали как раз - тоже самое, не отображается.
В Net - отображается, в PHP нет...
следующим шагом попробуем тернарную операцию - спасибо за подсказку.

На счет вопроса, почему мы используем второй запрос - что-то не поняла смысл вопроса, сорри... (DataSource1.Rows.Count == 0 -?)
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

Re: Не отображается датабэнд если нет данных в источнике дан

Сообщение Леонид »

На счет вопроса, почему мы используем второй запрос - что-то не поняла смысл вопроса, сорри... (DataSource1.Rows.Count == 0 -?)
Это я к тому, что почему бы вместо запроса не узнавать Count у источника данных просто так DataSource1.Rows.Count == 0, а не дёргать вторым запросом сервер лишний раз, тем более, если запрос "тяжеловесный".
aquilax
Сообщения: 78
Зарегистрирован: 19 май 2016, 16:17

Re: Не отображается датабэнд если нет данных в источнике дан

Сообщение aquilax »

А где в отчете можно это выражение написать: "DataSource1.Rows.Count == 0" ? - Мы просто сначала пишем в версии .Net, но проект должен быть совместим c PHP версией. А там не поддерживаются события...
Aleksey
Сообщения: 2906
Зарегистрирован: 22 апр 2010, 06:57

Re: Не отображается датабэнд если нет данных в источнике дан

Сообщение Aleksey »

Здравствуйте,

Как вариант, попробуйте задать данное условие в Condition для дополнительного бэнда, и выключить опцию "Component Is Enabled".

Спасибо.
Ответить