У меня есть отчет Crystal в Visual Studio 2008 (С#). Его источник данных устанавливается программно во время выполнения в список .NET, определяемый следующим образом:
List<visit_volume> Visits
a visit_volume
выглядит следующим образом:
public class visit_template
{
private int _numberOfVisits;
public int numberOfVisits
{
get { return this._numberOfVisits; }
set { this._numberOfVisits = value; }
}
// other ints and doubles declared here
// ..
// ..
private List<mEvent> _events;
public List<mEvent> events
{
get { return this._events; }
set
{
// updates _numberOfVisits here
// ..
// build-up a debugging string of each mEvent
// ..
}
}
}
Итак, подача в Crystal Report - это List<>
из visit_volume
объектов, которые сами содержат List<>
объектов mEvent
.
В Crystal Reports я могу видеть содержимое списка Visits
, но я не могу получить доступ и сообщить о содержимом члена events
- он просто не отображается. Это потому, что Crystal не может обрабатывать вложенные структуры List<>
, или я делаю что-то неправильно?
Спасибо заранее.
Подумав об этом, ответ на этот вопрос может состоять в том, чтобы включить подчиненный отчет, который просто имеет структуру events
в качестве источника данных.
Я думаю, что, хотя Кристалл понимает "внешний" список как тип данных для строк, типы данных полей внутри этой строки должны быть стандартными типами баз данных. Например, если вы создавали таблицу SqlServer и пытались добавить поле, это не позволило бы вам выбрать "список" в качестве типа данных этого поля.
Я думаю, что вам может понадобиться поместить все значения из вашего вложенного списка в отдельный объект/таблицу, а затем получить Кристалл, чтобы сформировать связь между этими двумя таблицами.
Я не уверен, как вы будете поставлять оба объекта в качестве источника данных - вам может потребоваться объявить набор данных в Visual Studio, получить Crystal, чтобы основывать свой отчет на этой структуре, а затем передать оба объекта через отдельные таблицы в Объект .NET DataSet.