Страница 1 из 1

Поддержка Report.NET в RAD Studio 2007

Добавлено: 16 сен 2008, 03:44
ks_adm
Есть ли какая-нибудь возможность подключить Report.NET сборку к Delphi.NET? Дело в том, что в отличие от предыдей Studio 2006, 2007-ая не поддерживает WinForms и получить визуальные компоненты Report.Net не представляется возможным.простой установкой в Net.Framework 2. Можно как нибудь их установить в панель визуальных компонентов или как создать динамически на форме VCL для NET Report.Design и подключение к базе данных, желательно пояснить кодом?

Спасибо.

Поддержка Report.NET в RAD Studio 2007

Добавлено: 16 сен 2008, 21:44
Edward
Здравствуйте.

Совсем необязательно располагать компонент StiReport на форме для обеспечения его работы.

простейшие команды позволят вызывать просмотр и редактирование отчета, чего в большинстве случаев будет достаточно:

Код: Выделить всё

StiReport report = new StiReport();
report.Load("reportTemplate.mrt");
report.Design();
report.Show();
Спасибо.

Поддержка Report.NET в RAD Studio 2007

Добавлено: 17 сен 2008, 03:36
ks_adm
Спасибо, Эдвард!

Я понимаю, что ваш продукт для VS, а не для CodeGear RAD Studio и, похоже, проблема связана с последней. Я пробовал тестировать Report.NET под BDS 2006 (Net.Framework 1.1.), там поддерживаюся WinForms и обнаружил странную вещь: на С# на WinForms приложении всё строится на ура. На Delphi.Net на таком же приложении вылетают странные ошибки при компиляции, не находятся ADODB.dll, все сборки вашего продукта, какие-то вообще непонятные библиотеки m.dll, VisualBasic.dll и так далее, хотя в режиме дизайнера все работает нормально и можно строить шаблон отчета. В Rad Studio 2007 WinForms приложения не поддерживаются и нет C#, единственное, что есть для NET - это фирменная обертка вокруг Net.Framework 2 разработчика для Delphi.Net и, понятно, что подключить визуальные компоненты не получается. Если просто подключить namespace в секции use и, соответственно, создать рефренс на Stimulsoft.Report.dll, то написав код на Delphi, аналогичный вашему, получаю добро компилятора
procedure TForm1.Button1Click(Sender: TObject);
var Rep:StiReport;
begin
Rep.load('rep.mrt');
Rep.Design;
Rep.Show;
end;
Приложение запускается, но при нажатии командной кнопки сообщение:
Object reference not set to an instance of an object
Т.е. нет базовых проинициализированных свойств, которые по умолчанию установлены в object inspector (в VS они называются Properties). Какие свойства нужно проинициализировать, и какие значения им присвоить по умолчанию?

Подскажите, пожалуйста, кто знает.

Спасибо заранее.

Поддержка Report.NET в RAD Studio 2007

Добавлено: 17 сен 2008, 05:07
Vital
ks_adm писал(а):Здравствуйте,
procedure TForm1.Button1Click(Sender: TObject);
var Rep:StiReport;
begin
Rep.load('rep.mrt');
Rep.Design;
Rep.Show;
end;

А где создается объект отчета? На какой строке происходит ошибка?

Спасибо.

Поддержка Report.NET в RAD Studio 2007

Добавлено: 17 сен 2008, 06:31
ks_adm
В режиме компиляции/сборки ошибок нет. При нажатии на кнопку создается переменная Rep с типом stiReport. Пока всё нормально. Далее любая строка Rep.Show либо Rep.Design приводит к вышеотмеченному сообщению. Похоже, что на C# строка StiReport report = new stiReport() еще и инициализирует объект, а на Delphi var Rep:stiReport похоже только создает переменную тира stiReport и не инициализирует, не знаю почему. В компиляторе при компиляции появляется сообщение, что Rep должна быть инициализирована, но не критичное, просто предупреждение. Но в режиме рантайм оно похоже становится критичным при вызове метода on_click

Поддержка Report.NET в RAD Studio 2007

Добавлено: 17 сен 2008, 09:26
Edward
Да, безусловно необходимо явно вызвать инициализацию переменной.

В C# это Stimulsoft.Report.StiReport report = new Stimulsoft.Report.stiReport().

Каким - то образом нужно вызвать этот конструктор и для переменной Rep.

Спасибо.

Поддержка Report.NET в RAD Studio 2007

Добавлено: 17 сен 2008, 11:56
ks_adm
Начало положено!
procedure TForm1.Button1Click(Sender: TObject);
var Rep:stiReport;
begin
Rep:= stiReport.Create; //инициализация
Rep.Load('test.mrt');
Rep.Design;
Rep.Show;
end;
Всем спасибо.