Страница 1 из 2

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

Добавлено: 09 дек 2011, 07:27
IVC
В отчете есть два DataBand. их заголовки после построения отчета получаются разной высоты. мне нужно растянуть меньший заголовок, чтобы он был такой же высоты, как и первый. как это можно сделать?
заранее спасибо!

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

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

Спасибо.

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

Добавлено: 13 дек 2011, 05:41
IVC
Имеем на странице два DataBand и соотв. два HeaderBand. Названия заголовков для обоих бэндов устанавливает пользователь, поэтому их длины заранее не известны. Свойства "Может расти" и "Расти в высоту" текста в обоих HeaderBand установлены в "Да". Высота одного HeaderBand может оказаться больше, чем другого. Необходимо установить высоты обоих HeaderBand одинаковыми (т.е. установить высоту меньшего заголовка равной высоте большего).

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

Добавлено: 14 дек 2011, 12:15
Aleksey
Здравствуйте,

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

Спасибо.

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

Добавлено: 15 дек 2011, 07:04
IVC
Здравствуйте,
когда сравниваю высоты бэндов, они оказываются одинаковой(исходной) величины. если можно, посмотрите простейший пример с описанной ситуацией и укажите, когда менять высоты. Спасибо.

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

Добавлено: 15 дек 2011, 10:29
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;
}
Спасибо.

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

Добавлено: 19 дек 2011, 11:20
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 с произвольной страницы?

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

Добавлено: 21 дек 2011, 06:03
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;
Спасибо.

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

Добавлено: 09 янв 2012, 09:33
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 бэнда данных содержат одинаковое кол-во строк, а значит первая половина страниц относится к первому бэнду, вторая - ко второму (страниц четное кол-во).
но в этом случае столкнулись с тем, что заголовок "залазит" на строку группировки.
посмотрите, пожалуйста, реальный пример.

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

Добавлено: 10 янв 2012, 13:28
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;
высота заголовков остается неизменной.
Какую версию продукта Вы используете?
Попробуйте проверить наш код в последнем предрелизном билде.

Спасибо.