Событие после выборки данных из БД
- Андрей Сорокин
- Сообщения: 107
- Зарегистрирован: 02 июл 2009, 11:31
- Откуда: Bryansk, Russia
- Контактная информация:
Событие после выборки данных из БД
Добрый день,
имеется отчёт с несколькими DataSources, которые выполняют коннект к MS SQL Server и получают данные для отчёта. Мне необходимо обработать событие после выполнения всех запросов к базе для анализа отсутствующих данных чтобы уведомить пользователя и не выводить пустой отчёт на экран. Каким образом лучше всего это реализовать?
Спасибо.
имеется отчёт с несколькими DataSources, которые выполняют коннект к MS SQL Server и получают данные для отчёта. Мне необходимо обработать событие после выполнения всех запросов к базе для анализа отсутствующих данных чтобы уведомить пользователя и не выводить пустой отчёт на экран. Каким образом лучше всего это реализовать?
Спасибо.
Re: Событие после выборки данных из БД
Здравствуйте,
Учтоните, пожалуйста, вы хотите это реализовать непосредственно в отчете, дизайнере или в коде своего приложения?
Спасибо.
Учтоните, пожалуйста, вы хотите это реализовать непосредственно в отчете, дизайнере или в коде своего приложения?
Спасибо.
- Андрей Сорокин
- Сообщения: 107
- Зарегистрирован: 02 июл 2009, 11:31
- Откуда: Bryansk, Russia
- Контактная информация:
Re: Событие после выборки данных из БД
В коде приложения, т.к. оно универсально и работает со всеми отчётами.
Спасибо.
Спасибо.
Re: Событие после выборки данных из БД
Здравствуйте,
Как вариант, вы можете использовать событие EndRender отчета:
StiOptions.Engine.GlobalEvents.ReportEndRender += GlobalEvents_ReportEndRender;
в котором проверить, используемые в самом отчете источники данных StiDataSourceHelper.GetUsedDataSourcesNames() и проверить наличие записей в данных источниках
Спасибо.
Как вариант, вы можете использовать событие EndRender отчета:
StiOptions.Engine.GlobalEvents.ReportEndRender += GlobalEvents_ReportEndRender;
в котором проверить, используемые в самом отчете источники данных StiDataSourceHelper.GetUsedDataSourcesNames() и проверить наличие записей в данных источниках
Код: Выделить всё
foreach (StiDataSource datasource in ((StiReport)sender).DataSources)
{
if (datasource.Count == 0)
}
- Андрей Сорокин
- Сообщения: 107
- Зарегистрирован: 02 июл 2009, 11:31
- Откуда: Bryansk, Russia
- Контактная информация:
Re: Событие после выборки данных из БД
Событие EndRender вызывается после подготовки всех страниц отчёта? Нет события, которое происходит именно после выполнения запросов к базе до генерации страниц чтобы исключить ненужные операции?
Кроме того, хотелось бы не отображать/не печатать пустой отчёт если в нём нет данных, просто выводить пользователю сообщение. Можно ли это как-то реализовать?
Спасибо.
Кроме того, хотелось бы не отображать/не печатать пустой отчёт если в нём нет данных, просто выводить пользователю сообщение. Можно ли это как-то реализовать?
Спасибо.
Re: Событие после выборки данных из БД
Добрый день!
Можно, в событии самого отчёта BeginRender(), например так:Событие EndRender вызывается после подготовки всех страниц отчёта? Нет события, которое происходит именно после выполнения запросов к базе до генерации страниц чтобы исключить ненужные операции?
Кроме того, хотелось бы не отображать/не печатать пустой отчёт если в нём нет данных, просто выводить пользователю сообщение. Можно ли это как-то реализовать?
Код: Выделить всё
qrMain.Parameters["DOC_CODE"].ParameterValue = decimal.Parse(AVar_0); // передаём параметр для отчёта
qrMain.Connect(); // коннект к Oracle
// суммируем все позиции по полю "Сумма"
decimal nTotalSum = 0;
foreach (System.Data.DataRow row in qrMain.DataTable.Rows)
nTotalSum += (decimal)row["N_TOTAL_SUM"];
bool isDemandVoucher = (nTotalSum == 0); // создаём флаг
Page1.Enabled = !isDemandVoucher; // отображаем необходимые страницы в зависимости от флага
DemandVoucherPage.Enabled = isDemandVoucher;
- Андрей Сорокин
- Сообщения: 107
- Зарегистрирован: 02 июл 2009, 11:31
- Откуда: Bryansk, Russia
- Контактная информация:
Re: Событие после выборки данных из БД
Спасибо, есть несколько вопросов:
1. Что за объект qrMain и как его получить?
2. Можно ли как-то прервать выполнение методов StiReport Render, Show, Print в случае отсутствия данных? Реализовывать через throw new Exception() не хочется...
Обработчик такого типа не работает
1. Что за объект qrMain и как его получить?
2. Можно ли как-то прервать выполнение методов StiReport Render, Show, Print в случае отсутствия данных? Реализовывать через throw new Exception() не хочется...
Обработчик такого типа не работает
Код: Выделить всё
report.BeginRender += ReportOnBeginRender;
private static void ReportOnBeginRender(object sender, EventArgs eventArgs)
{
StiReport report = sender as StiReport;
bool isNoData = true;
foreach (StiDataSource datasource in report.DataSources)
{
datasource.Connect();
if (datasource.Rows.Count > 0) { isNoData = false; break; }
}
if (isNoData)
{
MessageBox.Show("No data");
throw new Exception();
}
}
Последний раз редактировалось Андрей Сорокин 06 фев 2018, 12:26, всего редактировалось 1 раз.
Re: Событие после выборки данных из БД
Ах, да, забыл написать, в нашем случае это DataTable типа Stimulsoft.Report.Dictionary.StiOracleSource (которая у коннекта Stimulsoft.Report.Dictionary.StiOracleDatabase), приложил скриншот (обвёл на нём красным), как это выглядит.1. Что за объект qrMain и как его получить?
Здесь не подскажу, т.к. мы делаем немного по-другому, - создаём поток (BackgroundWorker, не Task потому что так было исторически, и пока на .Net 4.5 не перешли полностью), в нём в DoWork() выполняем все нужные SQL-запросы к Oracle, а затем в том же потоке происходит .Render(false) от Stimul уже с нашими данными, после чего (в событии Completed), если нет данных, то выводим туже страницу, но т.к. там ничего нет, то выводится только ReportTitle.2. Можно ли как-то прервать выполнение методов StiReport Render, Show, Print в случае отсутствия данных?
- Вложения
-
- Clipboard01.png (55.81 КБ) 4677 просмотров
- Андрей Сорокин
- Сообщения: 107
- Зарегистрирован: 02 июл 2009, 11:31
- Откуда: Bryansk, Russia
- Контактная информация:
Re: Событие после выборки данных из БД
Жаль от разработчиков нет ответа...
Re: Событие после выборки данных из БД
Здравствуйте.
После этого следующим событием идёт BeforePrint первой страницы отчёта.
В этом событии уже можно на основании всех данных включать/выключать все компоненты отчёта, и саму первую страницу, т.к. проверка свойства Enabled страницы производится после события BeforePrint страницы.
Есть также свойство отчёта IsStopped, при установке которого в true прерывается построение отчёта (вызывается StiReportRenderingStopException), а также прерывается выполнение метода Show().
Спасибо.
Подключение к данным в движке производится уже после вызова события BeginRender отчёта.Нет события, которое происходит именно после выполнения запросов к базе до генерации страниц чтобы исключить ненужные операции?
После этого следующим событием идёт BeforePrint первой страницы отчёта.
В этом событии уже можно на основании всех данных включать/выключать все компоненты отчёта, и саму первую страницу, т.к. проверка свойства Enabled страницы производится после события BeforePrint страницы.
Прерывание рендеринга отчёта (при нажатии кнопки Cancel прогресс-бара) у нас в движке производится с помощью StiReportRenderingStopException, который отлавливается в конце метода Render.Можно ли как-то прервать выполнение методов StiReport Render, Show, Print в случае отсутствия данных? Реализовывать через throw new Exception() не хочется...
Есть также свойство отчёта IsStopped, при установке которого в true прерывается построение отчёта (вызывается StiReportRenderingStopException), а также прерывается выполнение метода Show().
Спасибо.