StiViewerControl на вкладках
StiViewerControl на вкладках
День добрый, уважаемые!
Есть TabControl, в нём может быть N вкладок (чтобы была возможность открывать сразу несколько отчётов).
Возникла необходимость добавлять (динамически, из кода) контрол StiViewerControl на отдельную вкладку в TabControl'е.
Изучив форум и покопавшись в коде такой возможности не нашёл.
Возможно ли это вообще или придётся делать MDI-форму, а в ней кучу форм вместе tab'ов?
Есть TabControl, в нём может быть N вкладок (чтобы была возможность открывать сразу несколько отчётов).
Возникла необходимость добавлять (динамически, из кода) контрол StiViewerControl на отдельную вкладку в TabControl'е.
Изучив форум и покопавшись в коде такой возможности не нашёл.
Возможно ли это вообще или придётся делать MDI-форму, а в ней кучу форм вместе tab'ов?
StiViewerControl на вкладках
А что Вы используете, WinForms или WPF?
Если WPF, то есть такой контрол - ContentPresenter.
В него можно динамически класть любой контрол.
Если WPF, то есть такой контрол - ContentPresenter.
В него можно динамически класть любой контрол.
StiViewerControl на вкладках
Нет, на данный момент используем WinForms.
StiViewerControl на вкладках
Здравствуйте.
С какими трудностями вы столкнулись при реализации вашего проекта?
Вы можете добавить StiViewerControl на TabPage. С этим не должно возникнуть никаких проблем.
Спасибо.
С какими трудностями вы столкнулись при реализации вашего проекта?
Вы можете добавить StiViewerControl на TabPage. С этим не должно возникнуть никаких проблем.
Спасибо.
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'е.
StiViewerControl на вкладках
Здраувствуйте.
В данном случае отчёт не рендерится. Это надо делать принудительно.
Добавьте следующую строку в ваш код:
Данный код можно добавлять как перед или так и после последнего.
Спасибо.
В данном случае отчёт не рендерится. Это надо делать принудительно.
Добавьте следующую строку в ваш код:
Код: Выделить всё
stiReport.Render();
Код: Выделить всё
stiPreview.Report = stiReport;
Код: Выделить всё
newPage.Controls.Add(stiPreview);
Спасибо.
StiViewerControl на вкладках
Да, stiReport.Render() работает, а вот почему stiReport.Design(false) вызывает модальную форму мне не понятно.
То есть основная цель - именно редактировать отчёты, а рендерить их не сразу, а только по необходимости.
Как это сделать? Понятно, что есть перегруженные методы для stiReport.Design, но они для формы, а у меня вкладка, поэтому проблемка.
То есть основная цель - именно редактировать отчёты, а рендерить их не сразу, а только по необходимости.
Как это сделать? Понятно, что есть перегруженные методы для stiReport.Design, но они для формы, а у меня вкладка, поэтому проблемка.
StiViewerControl на вкладках
Здравствуйте.
Есдли вы хотите вызвать StiDesignerControl, то вам надо присвоить отчёт его свойству Report.
Смотрите наш пример проекта Designer_SaveLoad, который поставляется вместе с нашим продуктом.
Спасибо.
stiReport.Design(false) вызвыает создаёт дизайнер в новом окне.leon писал(а):Да, stiReport.Render() работает, а вот почему stiReport.Design(false) вызывает модальную форму мне не понятно.
То есть основная цель - именно редактировать отчёты, а рендерить их не сразу, а только по необходимости.
Как это сделать? Понятно, что есть перегруженные методы для stiReport.Design, но они для формы, а у меня вкладка, поэтому проблемка.
Есдли вы хотите вызвать StiDesignerControl, то вам надо присвоить отчёт его свойству Report.
Код: Выделить всё
designerControl1.Report = report;
Спасибо.
StiViewerControl на вкладках
Супер! Всё получилось, огромное спасибо! :biggrin:
StiViewerControl на вкладках
Всегда рады помочь Вам!