Кодо генерация вопросы

Обсуждение Stimulsoft Reports.NET
Ответить
max314
Сообщения: 6
Зарегистрирован: 11 мар 2007, 06:26

Кодо генерация вопросы

Сообщение max314 »

Добрый день!

После нескорльких часов экспериментов с отчетником и WinDiff-ом возникло несколько вопросов.

С начала несколько утверждений(поравьте меня в том месте где я не прав):
1. При генерации отчета содержимое компоенента StiText анализируеться и если там есть системная функция,
требующая чтобы ее значение было получено на этапе когда отчет уже сформирован(я эксперимеентировал с функциями TotalPageCount и PageNofM), то формируються следующие обработчики:
- обработчик получение значения
public void Text32__GetValue(object sender, Stimulsoft.Report.Events.StiGetValueEventArgs e)
{
e.Value = "";
e.StoreToPrinted = true;
}
- и обработчик
public System.String Text5_GetValue_End(Stimulsoft.Report.Components.StiComponent component)
{
return ToString(PageNofM);
}
причем последний в некоторых случаях вызваться из
public void ReportWordsToEnd__EndRender(object sender, System.EventArgs e)
а в некоторых из
public void ProcessAtEnd__EndRender(object sender, System.EventArgs e)
хотя они оба вызываються на заверешение рендинга репорта об этом говорить следующий код
this.EndRender += new System.EventHandler(this.ProcessAtEnd__EndRender);
this.EndRender += new System.EventHandler(this.ReportWordsToEnd__EndRender);


Вопросы:
- чем вызвана необходимость 2-х обработчиков на заверешение рендинга отчета
- кто из них будет вызван первым а кто вторым

- какими настройками компонента StiText я могу сформировать похожую ситуацию (формирование значения компонента в конце формирования отчета)
Пытаясь повторить такой код из дизайнера я положил компонент на страницу, выставил ему свойство Process at End = true
написал в text editor "text" и назначил обработчик Get Value.
В результате в коде я получил следующее:
public void Text14__GetValue(object sender, Stimulsoft.Report.Events.StiGetValueEventArgs e)
{
e.Value = "";
e.StoreToPrinted = true;
}

public System.String Text14_GetValue_End(Stimulsoft.Report.Components.StiComponent component)
{
return "text";
}

public void Text14_GetValue(object sender, Stimulsoft.Report.Events.StiGetValueEventArgs e)
{
e.Value = "Test";;
}
Причем сам компонент имет два обработчика получения значения
this.Text14 = new Stimulsoft.Report.Components.StiText();
this.Text14.ClientRectangle = new Stimulsoft.Base.Drawing.RectangleD(40, 0, 16, 4);
this.Text14.Name = "Text14";
this.Text14.ProcessAtEnd = true;
this.Text14.GetValue += new Stimulsoft.Report.Events.StiGetValueEventHandler(this.Text14__GetValue);
вырезано
this.Text14.GetValue += new Stimulsoft.Report.Events.StiGetValueEventHandler(this.Text14_GetValue);

причем обработчик Text14_GetValue_End вызываеться на окончании рендинга отчета
public void ProcessAtEnd__EndRender(object sender, System.EventArgs e)
{
this.Text32.SetText(new Stimulsoft.Report.Components.StiGetValue(this.Text32_GetValue_End));
this.Text13.SetText(new Stimulsoft.Report.Components.StiGetValue(this.Text13_GetValue_End));
> this.Text14.SetText(new Stimulsoft.Report.Components.StiGetValue(this.Text14_GetValue_End));
}
При формировании отчета я получил в поле то что и хотел ="Test" но каким образом оно получилось я не понял :(
Всегда ли будет работать такой подход или нет я не знаю.

Заранее спасибо за отчеты.
Vital
Сообщения: 647
Зарегистрирован: 09 июн 2006, 12:23

Кодо генерация вопросы

Сообщение Vital »

Вопросы:
- чем вызвана необходимость 2-х обработчиков на заверешение рендинга отчета
Чисто эстетическими соображениями. Первый используется для обработки свойства ProcessAtEnd текстов и графиков. Второй для системных переменных.
- кто из них будет вызван первым а кто вторым
В порядке подключения к событию, сначала ProcessAtEnd__EndRender затем ReportWordsToEnd__EndRender.
- какими настройками компонента StiText я могу сформировать похожую ситуацию (формирование значения компонента в конце формирования отчета)
Свойство ProcessAtEnd
Пытаясь повторить такой код из дизайнера я положил компонент на страницу, выставил ему свойство Process at End = true
написал в text editor "text" и назначил обработчик Get Value.
В результате в коде я получил следующее:
public void Text14__GetValue(object sender, Stimulsoft.Report.Events.StiGetValueEventArgs e)
{
e.Value = "";
e.StoreToPrinted = true;
}

public System.String Text14_GetValue_End(Stimulsoft.Report.Components.StiComponent component)
{
return "text";
}

public void Text14_GetValue(object sender, Stimulsoft.Report.Events.StiGetValueEventArgs e)
{
e.Value = "Test";;
}
Причем сам компонент имет два обработчика получения значения
this.Text14 = new Stimulsoft.Report.Components.StiText();
this.Text14.ClientRectangle = new Stimulsoft.Base.Drawing.RectangleD(40, 0, 16, 4);
this.Text14.Name = "Text14";
this.Text14.ProcessAtEnd = true;
this.Text14.GetValue += new Stimulsoft.Report.Events.StiGetValueEventHandler(this.Text14__GetValue);
вырезано
this.Text14.GetValue += new Stimulsoft.Report.Events.StiGetValueEventHandler(this.Text14_GetValue);
Все верно, так и было задумано.
причем обработчик Text14_GetValue_End вызываеться на окончании рендинга отчета
public void ProcessAtEnd__EndRender(object sender, System.EventArgs e)
{
this.Text32.SetText(new Stimulsoft.Report.Components.StiGetValue(this.Text32_GetValue_End));
this.Text13.SetText(new Stimulsoft.Report.Components.StiGetValue(this.Text13_GetValue_End));
> this.Text14.SetText(new Stimulsoft.Report.Components.StiGetValue(this.Text14_GetValue_End));
}
При формировании отчета я получил в поле то что и хотел ="Test" но каким образом оно получилось я не понял :(
Кодогенератор StimulReport.Net одна из самых сложных (и больших) частей. Не стоит углубляться слишком сильно в суть ее работы.
Всегда ли будет работать такой подход или нет я не знаю.
Всегда.

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