Кодо генерация вопросы
Добавлено: 11 мар 2007, 07:46
Добрый день!
После нескорльких часов экспериментов с отчетником и 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" но каким образом оно получилось я не понял
Всегда ли будет работать такой подход или нет я не знаю.
Заранее спасибо за отчеты.
После нескорльких часов экспериментов с отчетником и 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" но каким образом оно получилось я не понял
Всегда ли будет работать такой подход или нет я не знаю.
Заранее спасибо за отчеты.