/// <summary> /// Sets the formatter to use for this listener. /// </summary> /// <param name="formatterNodeReference"> /// A <see cref="FormatterNode"/> reference or <see langword="null"/> if no formatter is defined. /// </param> protected override void SetFormatterReference(ConfigurationNode formatterNodeReference) { if (formatterName == formatterNodeReference.Name) { Formatter = (FormatterNode)formatterNodeReference; } }
private void CreateFormatterNode(FormatterData formatterData) { FormatterNode formatterNode = NodeCreationService.CreateNodeByDataType(formatterData.GetType(), new object[] { formatterData }) as FormatterNode; if (null == formatterNode) { LogNodeMapError(node, formatterData.GetType()); return; } node.AddNode(formatterNode); }
private void OnFormatterNodeRemoved(object sender, ConfigurationNodeChangedEventArgs e) { formatterNode = null; }
// Закомментил старое /*protected override void WriteColumns(tablelayoutClass LayoutProfile, XslFOProfileWriter RepGen, DataTable oTable, LayoutColumns Columns, ReportParams Params, object CustomData, IDictionary Vars) * { * base.WriteColumns(LayoutProfile, RepGen, oTable, Columns, Params, CustomData, Vars); * * // создаем копию существующих столбцов * // для накопления общих итогов только по помеченным строкам * m_TotalColumns = cloneLayoutColumns(Columns); * } */ /// <summary> /// Вычисляет данные ячейки таблицы лэйаута /// </summary> /// <remarks>Переопределяем стандартный метод</remarks> protected override ReportFormatterData CalculateCellValue(ReportLayoutData LayoutData, TableLayout.LayoutColumns Columns, int RowNum, int ColumnNum, DataRow CurrentRow, int RowSpan) { // значение в ячейке object CurrentValue = null; // получаем объект, с которым работают форматтеры и эвалуаторы ReportFormatterData FormatterData = new ReportFormatterData( LayoutData, CurrentValue, null, CurrentRow, RowNum, ColumnNum); if (string.Empty == Columns[ColumnNum].RSFileldName) // если текущее значение не соответсвует никакой колонке рекордсета { if (Columns[ColumnNum].ColumnIsCounter) // если колонка - счетчик { // текущее значение счетчика CurrentValue = Columns[ColumnNum].CounterCurrent.ToString(); // инкрементируем счетчик Columns[ColumnNum].IncrementCounter(); } else // null иначе { CurrentValue = null; } } else // значение { CurrentValue = new Croc.XmlFramework.ReportService.Utility.MacroProcessor(FormatterData).Process(Columns[ColumnNum].RSFileldName); } // Encoding if (Columns[ColumnNum].Encoding == encodingtype.text) { CurrentValue = System.Web.HttpUtility.HtmlEncode(CurrentValue.ToString()); } FormatterData.CurrentValue = CurrentValue; // проходим по эвалуаторам и форматтерам if (Columns[ColumnNum].Formatters != null) { foreach (abstractformatterClass FormatterNode in Columns[ColumnNum].Formatters) { if (!FormatterNode.useSpecified || FormatterNode.use != usetype.totalcell) { // просим объект у фабрики IReportFormatter Formatter = (IReportFormatter)ReportObjectFactory.GetInstance(FormatterNode.GetAssembly(), FormatterNode.GetClass()); // делаем что-то Formatter.Execute(FormatterNode, FormatterData); } } } if (string.Empty != Columns[ColumnNum].AggregationFunction) { Columns[ColumnNum].UpdateTotals(CurrentValue); // проапдейтим итоги по помеченным строкам bool bNoTotals; try { // берем из строки рекорсета столбец NoTotals bNoTotals = Convert.ToBoolean(CurrentRow[NOTOTALS_COLUMN_NAME]); } catch (Exception) { // если, что-то пошло не так, считаем, что нужно // пересчитывать итоги (как обычно) bNoTotals = false; } // пересчитаем итоги, если нужно if (!bNoTotals) { TotalColumns[ColumnNum].UpdateTotals(CurrentValue); } } if (FormatterData.ClassName == null || FormatterData.ClassName == string.Empty) { FormatterData.ClassName = Columns[ColumnNum].CellCssClass; } return(FormatterData); }
private void OnDefaultFormatterNodeRemoved(object sender, ConfigurationNodeChangedEventArgs e) { this.defaultFormatterNode.Removed -= new ConfigurationNodeChangedEventHandler(this.OnDefaultFormatterNodeRemoved); this.defaultFormatterNode = null; }