Totals.Sum в коде события
Добавлено: 26 сен 2017, 14:13
Добрый день!
Коротко суть проблемы. В событии объекта отчёта BeginRender() пишем:
Подключаемся к БД Oracle, qrMain - объект DataSource (от StiOracleDatabase), колонка N_TOTAL_SUM is Decimal. Возвращает значение первой строки DataTable , а не всех строк указанной колонки.
Пока мы прописали во всех отчётах такой код вместо Sum:То есть, после коннекта к БД данные уже есть, их остаётся только просуммировать (или вызвать любую другую агрегирующую функцию).
Пожалуйста, почините функцию Totals.Sum().
Выяснился ещё один неприятный нюанс. Когда в запросе возвращается одна строка, то foreach() не срабатывает ни разу, поэтому workaround выглядит так:
Коротко суть проблемы. В событии объекта отчёта BeginRender() пишем:
Код: Выделить всё
qrMain.Connect(); -- коннект к БД Oracle
bool isDemandVoucher = (qrMain.N_TOTAL_SUM == 0);
Пока мы прописали во всех отчётах такой код вместо Sum:
Код: Выделить всё
decimal nTotalSum = 0;
foreach (Stimulsoft.Report.Dictionary.StiRow row in qrMain.Rows)
nTotalSum += (decimal)row["N_TOTAL_SUM"];
Пожалуйста, почините функцию Totals.Sum().
Выяснился ещё один неприятный нюанс. Когда в запросе возвращается одна строка, то foreach() не срабатывает ни разу, поэтому workaround выглядит так:
Код: Выделить всё
decimal nTotalSum = (qrMain.Rows.Count == 1) ? (decimal)qrMain.Rows[0]["N_TOTAL_SUM"] : 0;
foreach (Stimulsoft.Report.Dictionary.StiRow row in qrMain.Rows)
nTotalSum += (decimal)row["N_TOTAL_SUM"];