Дизайнер страниц
Дизайнер страниц
Пользователи у нас зачастую правят данные в уже готовом отчете. Можно ли сразу запускать контрол дизайнера в режиме редактирования страниц, как их PreviewControl а?
Дизайнер страниц
Здравствуйте,
У страницы есть метод DesignPage. Этот метод запускает дизайнер для страницы. Например:
Спасибо.
У страницы есть метод DesignPage. Этот метод запускает дизайнер для страницы. Например:
Код: Выделить всё
report.RenderedPages[0].DesignPage();
Дизайнер страниц
А можно ли посунуть этому методу свою форму с PreviewDesignerControlом? Просто хочется чтобы пользователь мог листать отрендереные странички и править их по необходимости.
Дизайнер страниц
В текущей версии генератора отчетов это сделать нельзя, но можно сделать похожий метод. Вот полный листинг метода, который выполняет дизайн одной страницы:
В кратце, что делает этот метод:
1. Создает новый пустой отчет и копирует в первую шаблонную страницу этого отчета выбранную страницу из отрендеренного отчета.
2. Подготавливает значение некоторых свойств к редактированию (Tag, ToolTip и т.д.)
3. Выключает лишние элементы в дизайнере.
Спасибо.
Код: Выделить всё
public DialogResult DesignPage()
{
bool renderedPage = false;
int pageIndex = Report.Pages.IndexOf(this);
if (pageIndex == -1)
{
renderedPage = true;
pageIndex = Report.RenderedPages.IndexOf(this);
}
StiPage tmpPage = this.Clone() as StiPage;
StiReport oldReport = this.Report;
StiReport tmpReport = StiReport.GetReport();
tmpReport.Unit = oldReport.Unit;
tmpReport.Pages.Clear();
tmpReport.Pages.Add(tmpPage);
tmpPage.Report = tmpReport;
#region Process Components in report
StiComponentsCollection components = tmpPage.GetComponents();
foreach (StiComponent component in components)
{
component.Page = tmpPage;
component.Report = tmpReport;
if (component.BookmarkValue != null)
{
component.Bookmark = new StiBookmarkExpression();
component.Bookmark.Value = component.BookmarkValue.ToString();
}
if (component.ToolTipValue != null)
{
component.ToolTip = new StiToolTipExpression();
component.ToolTip.Value = component.ToolTipValue.ToString();
}
if (component.HyperlinkValue != null)
{
component.Hyperlink = new StiHyperlinkExpression();
component.Hyperlink.Value = component.HyperlinkValue.ToString();
}
if (component.TagValue != null)
{
component.Tag = new StiTagExpression();
component.Tag.Value = component.TagValue.ToString();
}
StiImage image = component as StiImage;
if (image != null)
{
if (image.ImageToDraw != null)image.Image = image.ImageToDraw;
else image.ImageToDraw = image.Image;
}
}
#endregion
tmpPage.ExcelSheet.Value = tmpPage.ExcelSheetValue;
tmpReport.IsPageDesigner = true;//Эта строка кода будет работать только в билде от 25 февраля или позднее
bool resShowEventsTab = StiOptions.Designer.ShowEventsTab;
bool resPreviewReportVisible = StiOptions.Designer.PreviewReportVisible;
bool resCodeTabVisible = StiOptions.Designer.CodeTabVisible;
StiOptions.Designer.ShowEventsTab = false;
StiOptions.Designer.PreviewReportVisible = false;
StiOptions.Designer.CodeTabVisible = false;
DialogResult result = tmpReport.Design();
if (result == DialogResult.Yes)
{
tmpPage.ExcelSheetValue = tmpPage.ExcelSheet.Value;
if (renderedPage)oldReport.RenderedPages[pageIndex] = tmpPage;
else oldReport.Pages[pageIndex] = tmpPage;
components = tmpPage.GetComponents();
foreach (StiComponent component in components)
{
component.Report = oldReport;
if (component.Bookmark != null && component.Bookmark.Value.Length != 0)
component.BookmarkValue = component.Bookmark.Value;
else component.BookmarkValue = null;
if (component.ToolTip != null && component.ToolTip.Value.Length != 0)
component.ToolTipValue = component.ToolTip.Value;
else component.ToolTipValue = null;
if (component.Hyperlink != null && component.Hyperlink.Value.Length != 0)
component.HyperlinkValue = component.Hyperlink.Value;
else component.HyperlinkValue = null;
if (component.Tag != null && component.Tag.Value.Length != 0)
component.TagValue = component.Tag.Value;
else component.TagValue = null;
}
tmpPage.Report = oldReport;
tmpPage.ClearPage();
}
StiOptions.Designer.ShowEventsTab = resShowEventsTab;
StiOptions.Designer.PreviewReportVisible = resPreviewReportVisible;
StiOptions.Designer.CodeTabVisible = resCodeTabVisible;
return result;
}
1. Создает новый пустой отчет и копирует в первую шаблонную страницу этого отчета выбранную страницу из отрендеренного отчета.
2. Подготавливает значение некоторых свойств к редактированию (Tag, ToolTip и т.д.)
3. Выключает лишние элементы в дизайнере.
Спасибо.