Прошу помочь со следующей задачей.
Есть отчёт с одним Databand и одной Datatable, передаваемой в качестве источника данных. Записи этой таблицы в качестве одной из характеристик содержат ссылку на справочник (таблица - список договоров, поле - тип договора). Нужно подсчитать количество договоров каждого типа, при этом типы договоров - справочник, редактируемый пользователями, т.е. нет фиксированного списка типов.
Таблица передаётся уже сджойненная со справочником, всё это происходит ещё на этапе подготовки данных, до выдачи отчёта, т.е. грубо говоря, список полей выглядит как "номер договора", "код типа договора" (byte), "расшифровка типа договора" (string), и др., неважные поля.
Как можно, например, подсчитать число договоров каждого типа (по образу сделаю другие итоги).
Сейчас я объявил в коде отчёта две переменных типа Dictionary, и добавил using System.Collections.Generic:
Код: Выделить всё
public class Report : Stimulsoft.Report.StiReport
{
Dictionary statuses;
Dictionary totals;
Далее в ReportTitleBar я инициализирую эти переменные:
Код: Выделить всё
statuses = new Dictionary();
totals = new Dictionary();
Затем в DataBand эти переменные модифицируются, в зависимости от данных:
Код: Выделить всё
if (totals.ContainsKey(Contract_USP_ContractList.ContractStatusId))
{
totals[Contract_USP_ContractList.ContractStatusId]++;
}
if (!statuses.ContainsKey(Contract_USP_ContractList.ContractStatusId))
{
statuses.Add(Contract_USP_ContractList.ContractStatusId, Contract_USP_ContractList.ContractStatusName);
totals.Add(Contract_USP_ContractList.ContractStatusId, 0);
}
В Footerband я планировал получить статистику, в частности вот так:
Код: Выделить всё
e.Value="";
for (byte i=0; i<statuses.Count; i++)
{
e.Value+=statuses[i]+" - "+totals[i].ToString();
if (i<statuses.Count)
e.Value+="\n";
}
Тогда я решил проверить, что у меня в statuses. Вывел statuses.Count - выводится ноль. Это говорит о том, что всё таки statuses инициализировался в ReportTitle, но не модифицировался в дальнейшем. Хотя, ContractTypeId присутствует в датабенде и отображается в отчёте, если это поле выводить.
Просьба навести на путь истинный - корректен ли такой путь, и если нет, то что я делаю не так. Группировать записи не нужно, нужно лишь подсчитать итоги (и не только по этому полю, что в свою очередь делает группировку неприменимой - по десяти полям не сгруппируешь).
Спасибо.