Дизайнер страниц

Обсуждение Stimulsoft Reports.NET
Ответить
ask
Сообщения: 50
Зарегистрирован: 21 ноя 2007, 11:02
Откуда: Kazan

Дизайнер страниц

Сообщение ask »

Пользователи у нас зачастую правят данные в уже готовом отчете. Можно ли сразу запускать контрол дизайнера в режиме редактирования страниц, как их PreviewControl а?
Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Дизайнер страниц

Сообщение Vital »

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

У страницы есть метод DesignPage. Этот метод запускает дизайнер для страницы. Например:

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

report.RenderedPages[0].DesignPage();
Спасибо.
ask
Сообщения: 50
Зарегистрирован: 21 ноя 2007, 11:02
Откуда: Kazan

Дизайнер страниц

Сообщение ask »

А можно ли посунуть этому методу свою форму с PreviewDesignerControlом? Просто хочется чтобы пользователь мог листать отрендереные странички и править их по необходимости.
Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Дизайнер страниц

Сообщение Vital »

В текущей версии генератора отчетов это сделать нельзя, но можно сделать похожий метод. Вот полный листинг метода, который выполняет дизайн одной страницы:

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

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. Выключает лишние элементы в дизайнере.

Спасибо.
Ответить