Как динамически изменить отчет с помощью Crystal Reports? - PullRequest
1 голос
/ 16 января 2009

Я хочу знать, что я могу динамически изменять существующий Crystal Report (используя C # и Crystal Reports 2008) , чтобы он мог сообщать о принципиально разных данных (из одной базы данных), используя одну и ту же компоновку. Причина в том, что мы создаем приложение, которое позволяет пользователю указать:

  1. Фильтр, позволяющий отображать только те данные, которые его интересуют (т. Е. Где).
    • [например, отображать только здания в Нью-Йорке]
  2. Укажите, какие таблицы отображаются
    • [например, показать здания и этажи, но не комнаты]
  3. Укажите, какие поля отображаются
    • [например, Показать идентификатор здания, номер, имя, адрес и номер этажа]
  4. Изменить способ группировки раздела
    • [например, группировка по типу здания, году выпуска и т. Д.]
  5. Изменить поля, используемые в диаграмме
    • [например, площадь по типу здания, занятость по типу здания, площадь по идентификатору здания]

Из-за гибкости пользовательского интерфейса существует множество различных «вопросов», по которым пользователь может пытаться отчитываться, и я не хочу создавать отчет для каждой возможной комбинации. Для примера того, что я пытаюсь выполнить, смотрите изображение ниже. В отчете слева изображены здания, сгруппированные по площади. В отчете справа изображены здания, сгруппированные по участкам.

Сравнение отчетов http://img119.imageshack.us/img119/9052/performancereportcomparbt7.png

EDIT:

Я попытаюсь использовать параметры отчета, чтобы изменить отчет, как предложил Филипп Грондиер. Я добился успеха в этом, подавляя группы. Когда группа подавлена, группы перемещаются вверх, чтобы заполнить пустую область, чтобы все выстраивалось в линию без пробела. Однако такое же поведение не относится к отдельным текстовым объектам. Когда текстовый объект подавлен, вывод для этого поля является пустым пространством. То, что я хотел бы сделать, это подавить текстовый объект так, что вся строка будет подавлена, что приведет к тому, что все записи под ней будут «увеличиваться» на одну строку. Как мне этого добиться?

1 Ответ

3 голосов
/ 20 января 2009

В зависимости от типа обновления (и объектов, связанных с обновлением), вы можете использовать либо бесплатный craxdrt.dll (библиотека времени выполнения Designer.), Либо несвободный craxddrt.dll (библиотека дизайна и среда выполнения Designer). Я забыл детали, но вы обязательно найдете их в сети.

Ваши вопросы:

  1. Фильтр: можно обновить SQLQueryString объекта отчета во время выполнения или обновить предварительно объявленные параметры, чтобы они были добавлены в предложение «Где». Я думаю, что добавление параметров ограничено dll craxddrt, но обновление существующих можно выполнить с помощью dll craxdrt. Вы можете использовать интерфейс CR для обновления этих параметров или сделать это с помощью кода: одной из идей будет обновить эти значения в вашем клиентском интерфейсе (например, из активной формы) и обновить их программно. Пожалуйста, проверьте здесь для примера.
  2. Скрытие таблиц. Я не думаю, что «скрытие таблиц» имеет какой-либо смысл, так как вам понадобятся таблицы, чтобы все ваши отношения были доступны для вычисления итоговых значений. Таким образом, вы можете предложить своим пользователям возможность просматривать / скрывать детали или просматривать / скрывать различные уровни группировки. Это легко сделать с помощью бесплатной библиотеки craxdrt и метода collection / collection / 'suppress' объекта отчета.
  3. Еще раз, игра с различными областями отчета, кажется, лучшее решение здесь
  4. Советую не думать об этом! Изменение порядка данных может привести к непредсказуемым результатам, особенно при вычислении промежуточных итогов на уровне группы. В зависимости от ваших запросов вы можете придерживаться предложения (2), отображая неконкретную группу в отчете, или, для простых форм (только 1 группа), программно обновлять во время выполнения параметр, который будет использоваться в определении группы формула.
  5. Вернуться к предложению (2): создать полный отчет, в котором будут отображаться все ожидаемые данные, а затем скрыть / показать различные разделы отчета.

Существует еще один пример кода здесь , показывающий, как изменить соединение отчета с другой базой данных / другими таблицами во время выполнения.

...