Опубликован: 05.08.2010 | Уровень: специалист | Доступ: свободно
Самостоятельная работа 7:

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

Упражнение 2. Создание отчета Crystal Reports с помощью дизайнера Report Designer

В данном упражнении мы создадим отчет с нуля без помощи мастера, но используя графический режим дизанера отчетов Report Designer наподобие графического дизайнера Form Designer, позволяющего графически компоновать пользовательский интерфейс форм. Мы уже частично использовали его в предыдущем упражнении для донастройки отчета, созданного с помощью мастера.

Создание заготовки приложения

Прежде всего добавим к решению новый проект, но сделаем это отличным от прежнего способом.

  • Выполните команду оболочки File/New/Project и заполните окно мастера как показано на рисунке. При этом установите раскрывающийся список Solution в значение Add to Solution, а тип приложения выберите как Crystal Reports Application

  • Выберите режим создания проекта как пустого (не совсем) и тогда будет сгенерирована только простая заготовка отчета и форма Windows Forms с готовым объектом CrystalReportViewer


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

  • Перейдите на форму Form1 и убедитесь, что мастер заготовки создал строго типизированный документ отчета с компонентом просмотра CrystalReportViewer, только не подключил к нему источник данных

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

  • Присвойте форме заголовок Упражнение 2 и назначьте проект WinReport2 стартовым

Создание типизированного набора данных

Теперь создадим строго типизированный набор данных, который будет связываться с БД и к которому позднее мы подключим наш отчет.

  • Выполните команду меню оболочки Data/Add New Data Source и в качестве типа источника данных выберите Database


  • Пройдите по ссылке Next и на следующей вкладке мастера поключения щелкните на кнопке New Connection, чтобы создать новое соединение с источником данных


  • Через кнопку Browse выберите БД из прилагаемого к работе каталога Source или из другого источника, сразу протестируйте созданное соединение кнопкой Test Connection


  • На следующей вкладке мастера задайте новое имя строке подключения или оставьте сгенерированное по умолчанию (мы все равно ею явно пользоваться не будем)


Включенный флажок ' Yes, save the connection as:' означает, что строка соединения будет записана в конфигурационный файл приложения App.config и будет извлекаться из него менеджером конфигурации при каждом запуске исполнимой сборки проекта. В противном случае строку соединения с БД нужно будет прописывать вручную в коде приложения.

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


  • Щелкните на кнопке Finish, чтобы мастер создал строго типизированный набор данных NorthwindDataSet для таблицы Customers, которую мы далее будем выводить в отчет

Через панели Solution Explorer и Object Browser можно убедиться, что мастер создал не только всю инфраструктуру для доступа к источнику данных, но и физически скопировал саму БД в каталог проекта, а также создал файл конфигурации App.config со строкой соединения с БД заданного типа.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <connectionStrings>
        <add name="WinReport2.Properties.Settings.NorthwindConnectionString"
            connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Northwind.mdb"
            providerName="System.Data.OleDb" />
    </connectionStrings>
</configuration>
  • Проследите, чтобы файл БД был настроен на копирование его оболочкой в каталог сборки при компиляции проекта

Также было создано целое семейство классов для управления данными таблицы, упакованное не только в текущее пространство имен проекта WinReport2, но и в подпространство имен WinReport2.NorthwindDataSetTableAdapters из расчета, что будет создано несколько типизированных наборов в одном проекте


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

При выполнении в лабораторной работе упражнения №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" или один из зависимых от них компонентов. Не удается найти указанный файл.

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

Юрий Макушин
Юрий Макушин
Россия, Москва, РЭА им. Плеханова, 2004