Распечатать таблицу в динамически создаваемом отчете
Добавлено: 05 апр 2009, 12:51
Здравствуйте! Подскажите, пожалуйста!
Написал класс отчета, который принимает в конструкторе ссылку на таблицу и распечатывает ее. Проблема: не могу присвоить элементам StiText свойство Text.Value. Запускаю отчет - а все созданные StiText'ы пустые (незаполненные). Вот код (общая идеология взята из примера PrintTable документации):
Однако если написать:
и добавить обрабтчик
то все работает. Но меня не устравает такой подход ((( хочется задавать текст прямо в цикле, что я делаю неправильно?
В идеале вообще должно быть примерно так:
Само собой, к dataColumn я могу обратиться только из цикла.
Написал класс отчета, который принимает в конструкторе ссылку на таблицу и распечатывает ее. Проблема: не могу присвоить элементам StiText свойство Text.Value. Запускаю отчет - а все созданные StiText'ы пустые (незаполненные). Вот код (общая идеология взята из примера PrintTable документации):
Код: Выделить всё
public class ReportChartMini : Stimulsoft.Report.StiReport
{
private DataTable _dataTable;
public ReportChartMini(DataTable dataTable)
{
this._dataTable = dataTable;
this.InitReport();
this.PrintTable();
}
private void PrintTable()
{
StiReport report = this;
report.RegData("data", _dataTable);
//Fill dictionary
report.Dictionary.Synchronize();
report.Dictionary.DataSources[0].Name = "data";
report.Dictionary.DataSources[0].Alias = "data";
StiPage page = report.Pages[0];
//Create Databand
StiDataBand dataBand = new StiDataBand();
dataBand.DataSourceName = "data";
dataBand.Height = 0.5;
dataBand.Name = "DataBand";
page.Components.Add(dataBand);
//Create texts
double pos = 0;
int nameIndex = 0;
double columnWidth = StiAlignValue.AlignToMinGrid(page.Width / _dataTable.Columns.Count, 0.1, true);
foreach (DataColumn dataColumn in _dataTable.Columns)
{
StiText dataText = new StiText(new RectangleD(pos, 0, columnWidth, 0.5));
dataText.Text.Value = "foo_text"; //ВОТ ТУТ ЧТО_ТО НЕ ТАК
//dataText.Text.Value = "{TotalPageCount}"; //если так - все равно отображается StiText без текста
dataText.Name = "DataText" + nameIndex.ToString();
dataText.Border.Side = StiBorderSides.All;
dataBand.Components.Add(dataText);
pos = pos + columnWidth;
nameIndex++;
}
}
}
Код: Выделить всё
dataText.GetValue += new Stimulsoft.Report.Events.StiGetValueEventHandler(TextInfo__GetValue);
Код: Выделить всё
public void TextInfo__GetValue(object sender, Stimulsoft.Report.Events.StiGetValueEventArgs e)
{
e.Value = "foo_text from GetValue";
}
В идеале вообще должно быть примерно так:
Код: Выделить всё
dataText.Text.Value = "{data." + Stimulsoft.Report.CodeDom.StiCodeDomSerializator.ReplaceSymbols(dataColumn.ColumnName) + "}";