Опубликован: 05.08.2010 | Доступ: свободный | Студентов: 2008 / 46 | Оценка: 4.50 / 4.40 | Длительность: 60:26:00
Самостоятельная работа 7:

Создание отчетов Crystal Reports.NET в графическом режиме

Вкладка Record Selection

При формировании отчета на базе нескольких таблиц может понадобиться включать в отчет только часть данных из этих таблиц, выбирая их по определенному критерию. Нужные поля помещаются в правый список вкладки и для них в появившемся раскрывающемся списке формул фильтрации закрепляется определенный критерий. При выполнении отчета этот критерий преобразуется в SQL-запросы, передаваемые в БД для выборки помещаемых в отчет данных.

Фильтр, закрепляемый за полями, при невозможности преобразования в SQL-запрос реализуется собственными средствами генератора отчетов. Здесь интересно отметить, что Crystal Reports самостоятельно связывается с БД и выбирает из нее указанные данные по настроенным критериям.

Последней вкладкой мастера создания отчета является Report Style, устанавливающая внешний вид будущего отчета.

  • Щелкните на кнопке Finish и мастер создаст заготовку отчета, которую откроет в конструкторе Report Designer (в режиме дизайнера)

Обратите внимание на две вкладки внизу рабочей области дизайнера отчета. Они позволяют переключаться в режим конструирования или предварительного просмотра отчета. Наш сгенерированный отчет изначально состоит из 5 основных секций:

  1. Report Header - заголовок всего отчета (обычно сюда помещается титульная страница, логотип компании, диаграммы, сведения об авторе и т.п.). По умолчанию обычно подавляется (Suppress).
  2. Page Header - заголовок для страницы (заголовки полей, колонтитул для отчета, номера страниц)
  3. Group Header - заголовок, или верхний колонтитул, группы. Появляется в начале каждой группы и обычно используется для вывода названия группы
  4. Details - поля базы данных или формул (собственно данные из отчета)
  5. Group Footer - нижний колонтитул группы. Появляется в конце каждой группы и обычно используется для вывода названия группы, промежуточных или итоговых сумм
  6. Report Footer - итоговое поле в конце отчета (общие итоги, авторские права, официальные предупреждения, диаграммы, объекты Cross-Tab для отчета в целом)
  7. Page Footer - нижний колонтитул для страницы (номера страниц, описания рисунков, примечания)

Дополнительными являются секции Group Header и Group Footer, созданные мастером при формировании групп. Одновременно появится панель Field Explorer (Проводник полей) и дополнительное меню Crystal Reports. Панель можно включить в режиме Report Designer через меню Crystal Reports/Field Explorer или View/Other Windows/Document Outline или щелкнув на пиктограмме Toggle Field View панели инструментов. В состав оболочки .NET включены две панели инструментов: Crystal Reports - Main и Crystal Reports - Insert.

В панели Field Explorer представлены контейнеры со всеми объектами типа поле, которые могут присутствовать в отчете:


  • Database Fields (Поля базы данных) - отображаются те поля, которые напрямую поступают из базы данных. Как правило, эти поля размещаются в секции Details (Подробности)
  • Formula Fields (Поля формул) - при помощи этого контейнера в отчет можно добавлять поля формул
  • Parameter Fields (Поля параметров) - поля параметров редко используются в отчетах напрямую. Чаще всего они применяются для фильтрации данных в отчете. Однако можно напрямую поместить поле параметра в какую-либо секцию отчета
  • Group Name Fields (Поля имен групп) - обычно они генерируются и добавляются в отчет автоматически, однако при желании их можно добавить в отчет из этого контейнера (после того, как будет создана группировка)
  • Running Total Fields (Поля нарастающих итогов) - специальные поля, значение которых зависит от значения такого же поля для предыдущей записи
  • SQL Expression Fields (Поля SQL-выражений) - используются специальные формулы, вычисление которых производится на сервере баз данных. К сожалению, можно использовать только такие поля выражений SQL, которые возвращают скалярные значения
  • Special Fields (Специальные поля) - многочисленный набор служебных полей отчета
  • Unbound Fields - не связанные с данными поля

Добавление полей на форму отчета в режиме Report Designer осуществляется простым перетаскиванием поля из панели Field Explorer в нужное место формы либо через меню Crystal Reports, либо через контекстное меню формы отчета командой Insert. Настройка отображения поля осуществляется через окно Format Editor, вызываемое на форме в контекстном меню поля опцией Format Object.

Команда Insert/Text Object вставляет на форму отчета текстовое поле, с помощью которого создаются надписи и другие элементы, подобные названиям столбцов и комментариев, которые не должны меняться в зависимости от информации, поступающей из источника. Затем обычным образом этому полю можно настроить параметры форматирования. Во многих ситуациях очень удобно помещать внутрь текстового поля обычные поля из таблиц базы данных. Можно перекрыть несколько текстовых полей друг поверх друга или поля заголовков и подавлять отображение ненужных средствами условного форматирования.

Другими простыми средствами оформления отчетов, доступных через команду Insert, являются объекты

  • Line - просто линия, вертикальная или горизонтальная
  • Box - прямоугольник, который можно преобразовать в овал. Существует сам по себе. Если в него поместить какие-нибудь объекты (например, текстовые поля), то при перетаскивании объекта Box они перемещаться не будут. Для создания рамок вокруг полей лучше использовать их собственные свойства на вкладке Border окна Format Editor, а не объекты Box
  • Chart - для включения в отчет диаграмм и графиков
  • Picture - для включения рисунков
  • OLE Object - возможность вставить внутрь отчета Crystal Reports файл внешнего приложения. Чаще всего вставляются листы Excel, но можно вставить, например, аудио и видеоролики, документы Word, схемы Visio и т.п. - файл любого приложения, соответствующего стандартам OLE. При активизации этого объекта управление передается "ответственному" за него приложению, например, Excel, которое должно быть установлено на данном компьютере

Доступными специальными полями ( Special Fields ) являются следующие:

  • Print Date - дата печати отчета
  • Print Time - время печати отчета
  • Modification Date - дата последнего изменения отчета
  • Modification Time - время последнего изменения отчета
  • Data Date - дата считывания данных из БД
  • Data Time - время считывания данных из БД
  • Record Number - внутренний порядковый номер записи, присваиваемый всем записям, которые передаются в отчет
  • Page Number - номер страницы отчета
  • Group Number - внутренний порядковый номер, присваиваемый всем группам
  • Total Page Count - общее число страниц
  • Report Title - заголовок отчета, сохраненный в разделе Title окна Document Properties, открытого командой Report/Summary Info


  • Report Comments - комментарий, сохраненный в разделе Comments окна Document Properties
  • Record Selection Formula - формула выбора записей, используемая в отчете
  • Group Selection Formula - формула выбора групп, используемая в отчете
  • File Path and Name - полный путь и имя файла отчета
  • File Author - автор отчета, сохраненный в разделе Author окна Document Properties
  • File Creation Date - дата создания файла *.rpt отчета
  • Page N of M - текущая страница N из M страниц

Созданный мастером отчет существует независимо в отдельном файле и нужно внедрить его в наше приложение. Однако это не просто отчет, но еще и сгенерированный на языке C# класс CrystalReport1, расположенный в файле CrystalReport1.cs. Такой отчет называется типизированным.

  • Перейдите в режим дизайна формы, найдите в панели Toolbox вкладку Reporting и перетащите на форму компонент CrystalReportViewer
  • Установите свойство ReportSource компонента CrystalReportViewer в значение типизированного документа отчета


  • Запустите приложение, должен получиться отчет с полноценными элементами управления


В данном упражнении мы использовали компонент CrystalReportViewer из пространства имен CrystalDecisions.Windows.Forms, который позволяет просматривать отчет и печатать его.

Алексей Бабушкин
Алексей Бабушкин

При выполнении в лабораторной работе упражнения №1 , а именно при выполнении нижеследующего кода:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using Microsoft.Xna.Framework.Graphics;

   

namespace Application1

{

    public partial class MainForm : Form

    {

        // Объявим поле графического устройства для видимости в методах

        GraphicsDevice device;

   

        public MainForm()

        {

            InitializeComponent();

   

            // Подпишемся на событие Load формы

            this.Load += new EventHandler(MainForm_Load);

   

            // Попишемся на событие FormClosed формы

            this.FormClosed += new FormClosedEventHandler(MainForm_FormClosed);

        }

   

        void MainForm_FormClosed(object sender, FormClosedEventArgs e)

        {

            //  Удаляем (освобождаем) устройство

            device.Dispose();

            // На всякий случай присваиваем ссылке на устройство значение null

            device = null;       

        }

   

        void MainForm_Load(object sender, EventArgs e)

        {

            // Создаем объект представления для настройки графического устройства

            PresentationParameters presentParams = new PresentationParameters();

            // Настраиваем объект представления через его свойства

            presentParams.IsFullScreen = false; // Включаем оконный режим

            presentParams.BackBufferCount = 1;  // Включаем задний буфер

                                                // для двойной буферизации

            // Переключение переднего и заднего буферов

            // должно осуществляться с максимальной эффективностью

            presentParams.SwapEffect = SwapEffect.Discard;

            // Устанавливаем размеры заднего буфера по клиентской области окна формы

            presentParams.BackBufferWidth = this.ClientSize.Width;

            presentParams.BackBufferHeight = this.ClientSize.Height;

   

            // Создадим графическое устройство с заданными настройками

            device = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, DeviceType.Hardware,

                this.Handle, presentParams);

        }

   

        protected override void OnPaint(PaintEventArgs e)

        {

            device.Clear(Microsoft.Xna.Framework.Graphics.Color.CornflowerBlue);

   

            base.OnPaint(e);

        }

    }

}

Выбрасывается исключение:

Невозможно загрузить файл или сборку "Microsoft.Xna.Framework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=6d5c3888ef60e27d" или один из зависимых от них компонентов. Не удается найти указанный файл.

Делаю все пунктуально. В чем может быть проблема?