установить высоту заголовка данных

Обсуждение Stimulsoft Reports.NET
IVC
Сообщения: 37
Зарегистрирован: 09 дек 2011, 07:11

установить высоту заголовка данных

Сообщение IVC »

В отчете есть два DataBand. их заголовки после построения отчета получаются разной высоты. мне нужно растянуть меньший заголовок, чтобы он был такой же высоты, как и первый. как это можно сделать?
заранее спасибо!
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

установить высоту заголовка данных

Сообщение HighAley »

Здравствуйте.
IVC писал(а):В отчете есть два DataBand. их заголовки после построения отчета получаются разной высоты. мне нужно растянуть меньший заголовок, чтобы он был такой же высоты, как и первый. как это можно сделать?
заранее спасибо!
Опишите, пожалуйста, вашу проблему более подробно. А лучше пришлите нам ваш шаблон отчёта с тестовыми данными, чтобы воспроизвести проблему.

Спасибо.
IVC
Сообщения: 37
Зарегистрирован: 09 дек 2011, 07:11

установить высоту заголовка данных

Сообщение IVC »

Имеем на странице два DataBand и соотв. два HeaderBand. Названия заголовков для обоих бэндов устанавливает пользователь, поэтому их длины заранее не известны. Свойства "Может расти" и "Расти в высоту" текста в обоих HeaderBand установлены в "Да". Высота одного HeaderBand может оказаться больше, чем другого. Необходимо установить высоты обоих HeaderBand одинаковыми (т.е. установить высоту меньшего заголовка равной высоте большего).
Вложения
11.jpg
11.jpg (82.82 КБ) 3699 просмотров
Aleksey
Сообщения: 2907
Зарегистрирован: 22 апр 2010, 06:57

установить высоту заголовка данных

Сообщение Aleksey »

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

В данном случае, необходимо использовать два прохода и скрипты.
На первом проходе сохранить высоту обоих бэндов, в начале второго прохода определить наибольшее значение и установить высоту обоих бэндов в это значение.
Если возникнут трудности, пришлите ваш отчет, мы попробуем доработать его.

Спасибо.
IVC
Сообщения: 37
Зарегистрирован: 09 дек 2011, 07:11

установить высоту заголовка данных

Сообщение IVC »

Здравствуйте,
когда сравниваю высоты бэндов, они оказываются одинаковой(исходной) величины. если можно, посмотрите простейший пример с описанной ситуацией и укажите, когда менять высоты. Спасибо.
Вложения
example.rar
(5.5 КБ) 197 скачиваний
Aleksey
Сообщения: 2907
Зарегистрирован: 22 апр 2010, 06:57

установить высоту заголовка данных

Сообщение Aleksey »

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

Вы можете использовать следующий код в событии EndRender страницы:

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

if (IsFirstPass)
{
    StiText rendert1 = this.RenderedPages[0].GetComponents()["t1"] as StiText;
    StiText rendert5 = this.RenderedPages[0].GetComponents()["t5"] as StiText;
    if (rendert1.Height > rendert5.Height)
        t5.Height = rendert1.Height;
    else
        t1.Height = rendert5.Height;
}
Спасибо.
Вложения
Rep.mrt
(13.19 КБ) 374 скачивания
IVC
Сообщения: 37
Зарегистрирован: 09 дек 2011, 07:11

установить высоту заголовка данных

Сообщение IVC »

Спасибо, это как раз то, что надо было, и на этом примере все хорошо работает.
Однако, на реальном проекте вылетает ошибка на вызове функции Render():

try
{
stiRep.Dictionary.Databases.Clear();
stiRep.DataSources.Clear();
DataSet dsPlusMinus = new DataSet("dsPlusMinus");
dsPlusMinus.Tables.Add(m_dtPlusMinus);
stiRep.RegData(dsPlusMinus);
stiRep.Dictionary.Synchronize();
stiRep.Compile();
}
catch (Exception ex)
{
MessageBox.Show("Ошибка компиляции отчета\n" + ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Application.DoEvents();
stiRep.CompiledReport.Rendering += new EventHandler(OnRendering);
stiRep.Render(true);

ошибка:
System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Source="-kpwqihs"
StackTrace:
at Reports.Отчет.Page1_EndRender(Object sender, EventArgs e)
at Stimulsoft.Report.Components.StiPage.InvokeEndRender()
at Stimulsoft.Report.Engine.StiPageHelper.RenderPage(StiPage page)
at Stimulsoft.Report.Engine.StiRenderProviderV2.RenderReport(StiReport report, StiReport masterReport, StiRenderState state)
at Stimulsoft.Report.Engine.StiRenderProviderV2.Render(StiReport report, StiRenderState state)
at Stimulsoft.Report.Engine.StiReportV2Builder.RenderSingleReport(StiReport masterReport, StiRenderState renderState)
at Stimulsoft.Report.StiReport.RenderReport(StiRenderState renderState)
at Stimulsoft.Report.StiReport.Render(StiRenderState renderState, StiGuiMode guiMode)
at Stimulsoft.Report.StiReport.Render(StiRenderState renderState)
at Stimulsoft.Report.StiReport.Render(Boolean showProgress, Int32 fromPage, Int32 toPage)
at Stimulsoft.Report.StiReport.Render(Boolean showProgress)
at SKZ.frmCountSheetReport.RenderReport()
at SKZ.frmCountSheetReport.frmCountSheetReport_Load(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.SendMessage(HandleRef hWnd, Int32 msg, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
at System.Windows.Forms.Control.set_Visible(Boolean value)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()
at SKZ.frmCountSheetParams.btnOK_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()
at SKZ.frmZarplata.mnusCountSheet_Click(Object sender, EventArgs e)
at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
at System.Windows.Forms.ToolStripMenuItem.OnClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.ToolStripDropDown.OnMouseUp(MouseEventArgs mea)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ToolStrip.WndProc(Message& m)
at System.Windows.Forms.ToolStripDropDown.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at SKZ.frmStart.cmdZarpl_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at SKZ.Program.Main()
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:


Вроде разобрались с этой ситуацией. Дело в том, что в этих строках
StiText rendert1 = this.RenderedPages[0].GetComponents()["t1"] as StiText;
StiText rendert5 = this.RenderedPages[0].GetComponents()["t5"] as StiText;
идет обращение к нулевой странице. В общем случае число строк данных для первого бэнда будет произвольное количество. Как в этом случае получить t5 с произвольной страницы?
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

установить высоту заголовка данных

Сообщение HighAley »

Здравствуйте.
IVC писал(а):Вроде разобрались с этой ситуацией. Дело в том, что в этих строках
StiText rendert1 = this.RenderedPages[0].GetComponents()["t1"] as StiText;
StiText rendert5 = this.RenderedPages[0].GetComponents()["t5"] as StiText;
идет обращение к нулевой странице. В общем случае число строк данных для первого бэнда будет произвольное количество. Как в этом случае получить t5 с произвольной страницы?
Попробуйте использовать следующий код:

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

StiText rendert5 = this.RenderedPages.GetComponentByName("t5") as StiText;
Спасибо.
IVC
Сообщения: 37
Зарегистрирован: 09 дек 2011, 07:11

установить высоту заголовка данных

Сообщение IVC »

Aleksey писал(а):Здравствуйте.
IVC писал(а):Вроде разобрались с этой ситуацией. Дело в том, что в этих строках
StiText rendert1 = this.RenderedPages[0].GetComponents()["t1"] as StiText;
StiText rendert5 = this.RenderedPages[0].GetComponents()["t5"] as StiText;
идет обращение к нулевой странице. В общем случае число строк данных для первого бэнда будет произвольное количество. Как в этом случае получить t5 с произвольной страницы?
Попробуйте использовать следующий код:

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

StiText rendert5 = this.RenderedPages.GetComponentByName("t5") as StiText;
Спасибо.
не срабатывает, если использовать функцию GetComponentByName:

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

StiText rendert1 = this.RenderedPages.GetComponentByName("txtHeadPlus1") as StiText;
	StiText rendert2 = this.RenderedPages.GetComponentByName("txtHeadMinus1") as StiText;
	if (rendert1.Height > rendert2.Height)
        txtHeadMinus1.Height = rendert1.Height;
    else
        txtHeadPlus1.Height = rendert2.Height;
высота заголовков остается неизменной.

попробовали заменить на следующее:

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

StiText rendert1 = this.RenderedPages[0].GetComponents()["txtHeadPlus1"] as StiText;
	StiText rendert2 = this.RenderedPages[this.RenderedPages.Count-1].GetComponents()["txtHeadMinus1"] as StiText;
	if(rendert1 != null && rendert2 != null)
    	{
    		if (rendert1.Height > rendert2.Height)
        	{			
			for (int i = 1; i <= 20; i++)
            		{
				for(int j = this.RenderedPages.Count/2; j < this.RenderedPages.Count; ++j)
				{
            		rendert2 = this.RenderedPages[j].GetComponents()["txtHeadMinus" + i] as StiText;
					if(rendert2 != null)
					{
                		rendert2.Height = rendert1.Height;
					}
				}                
            		}
		}
        else
        {
		for (int i = 1; i <= 20; i++)
            	{
			for(int j = 0; j < this.RenderedPages.Count/2; ++j)
			{
            			rendert1 = this.RenderedPages[j].GetComponents()["txtHeadPlus" + i] as StiText;
				if(rendert2 != null)
				{
                			rendert1.Height = rendert2.Height;
				}
			}            	
		}
	}
более красиво не получилось.. здесь считаем, что 2 бэнда данных содержат одинаковое кол-во строк, а значит первая половина страниц относится к первому бэнду, вторая - ко второму (страниц четное кол-во).
но в этом случае столкнулись с тем, что заголовок "залазит" на строку группировки.
посмотрите, пожалуйста, реальный пример.
Вложения
11.rar
(20.12 КБ) 185 скачиваний
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

установить высоту заголовка данных

Сообщение HighAley »

Здравствуйте.
IVC писал(а):не срабатывает, если использовать функцию GetComponentByName:

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

StiText rendert1 = this.RenderedPages.GetComponentByName("txtHeadPlus1") as StiText;
	StiText rendert2 = this.RenderedPages.GetComponentByName("txtHeadMinus1") as StiText;
	if (rendert1.Height > rendert2.Height)
        txtHeadMinus1.Height = rendert1.Height;
    else
        txtHeadPlus1.Height = rendert2.Height;
высота заголовков остается неизменной.
Какую версию продукта Вы используете?
Попробуйте проверить наш код в последнем предрелизном билде.

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