Распечатать таблицу в динамически создаваемом отчете
Добавлено: 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) + "}";