StiViewerControl на вкладках

Обсуждение Stimulsoft Reports.NET
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

StiViewerControl на вкладках

Сообщение Леонид »

День добрый, уважаемые!

Есть TabControl, в нём может быть N вкладок (чтобы была возможность открывать сразу несколько отчётов).
Возникла необходимость добавлять (динамически, из кода) контрол StiViewerControl на отдельную вкладку в TabControl'е.
Изучив форум и покопавшись в коде такой возможности не нашёл.
Возможно ли это вообще или придётся делать MDI-форму, а в ней кучу форм вместе tab'ов?
VitalyV
Сообщения: 25
Зарегистрирован: 23 май 2012, 05:00
Откуда: Chelyabinsk

StiViewerControl на вкладках

Сообщение VitalyV »

А что Вы используете, WinForms или WPF?
Если WPF, то есть такой контрол - ContentPresenter.
В него можно динамически класть любой контрол.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

StiViewerControl на вкладках

Сообщение Леонид »

Нет, на данный момент используем WinForms.
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

StiViewerControl на вкладках

Сообщение HighAley »

Здравствуйте.

С какими трудностями вы столкнулись при реализации вашего проекта?
Вы можете добавить StiViewerControl на TabPage. С этим не должно возникнуть никаких проблем.

Спасибо.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

StiViewerControl на вкладках

Сообщение Леонид »

Приведу более подробное описание в виде кусков кода, которые я использую в процедурах.

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

        // report objects declaration
        StiReport stiReport;
        StiViewerControl stiPreview;

        // get report body (if it exists)
        MemoryStream reportBody = GetReportBody();

        // create report object
        stiReport = new StiReport();

        // load report from prepared stream (if it's null, then create new one)
        if (reportBody != null)
          stiReport.Load(reportBody);

        // set the name of the report for the stimul object caption
        stiReport.ReportName = reportName;

        // create preview object //
        stiPreview = new StiViewerControl();
        stiPreview.Dock = DockStyle.Fill; // fill up the form

        // assign report object to preview control //
        stiPreview.Report = stiReport;

        // create new page
        XtraTabPage newPage = new XtraTabPage();
        newPage.Text = reportName; // new name or an existing one

        // add page
        tcDesign.TabPages.Add(newPage); // add page to the tab pages collection
        tcDesign.SelectedTabPage = newPage; // make new page active

        // add preview control to the page
        newPage.Controls.Add(stiPreview); <- да, он добавляет preview control на вкладку, но отчёта там нет; если после этого вызвать метод stiPreview.Report.Design(), то последний создаст модальную форму с загруженным отчётом, а не будет показывать отчёт в этом preview control'е.

HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

StiViewerControl на вкладках

Сообщение HighAley »

Здраувствуйте.

В данном случае отчёт не рендерится. Это надо делать принудительно.
Добавьте следующую строку в ваш код:

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

stiReport.Render();
Данный код можно добавлять как перед

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

stiPreview.Report = stiReport;
или

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

newPage.Controls.Add(stiPreview);
так и после последнего.

Спасибо.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

StiViewerControl на вкладках

Сообщение Леонид »

Да, stiReport.Render() работает, а вот почему stiReport.Design(false) вызывает модальную форму мне не понятно.
То есть основная цель - именно редактировать отчёты, а рендерить их не сразу, а только по необходимости.
Как это сделать? Понятно, что есть перегруженные методы для stiReport.Design, но они для формы, а у меня вкладка, поэтому проблемка.
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

StiViewerControl на вкладках

Сообщение HighAley »

Здравствуйте.
leon писал(а):Да, stiReport.Render() работает, а вот почему stiReport.Design(false) вызывает модальную форму мне не понятно.
То есть основная цель - именно редактировать отчёты, а рендерить их не сразу, а только по необходимости.
Как это сделать? Понятно, что есть перегруженные методы для stiReport.Design, но они для формы, а у меня вкладка, поэтому проблемка.
stiReport.Design(false) вызвыает создаёт дизайнер в новом окне.
Есдли вы хотите вызвать StiDesignerControl, то вам надо присвоить отчёт его свойству Report.

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

designerControl1.Report = report;
Смотрите наш пример проекта Designer_SaveLoad, который поставляется вместе с нашим продуктом.

Спасибо.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

StiViewerControl на вкладках

Сообщение Леонид »

Супер! Всё получилось, огромное спасибо! :biggrin:
Andrew
Сообщения: 586
Зарегистрирован: 09 июн 2006, 12:22

StiViewerControl на вкладках

Сообщение Andrew »

Всегда рады помочь Вам!
Ответить