/// <summary> /// Формирует визуальное представление отчета на основании описания /// </summary> /// <param name="LayoutProfile">xml-профиль лэйаута</param> /// <param name="LayoutData">параметры</param> /// <remarks>Переопределяем стандартный метод</remarks> protected override void DoMake(abstractlayoutClass LayoutProfile, ReportLayoutData LayoutData) { base.DoMake(LayoutProfile, LayoutData); // очищаем столбцы итогов m_TotalColumns = null; }
/// <summary> /// Рисует колонки таблицы лэйаута /// </summary> /// <remarks>Переопределяем стандартный метод</remarks> protected override void WriteColumns(tablelayoutClass LayoutProfile, ReportLayoutData LayoutData, DataTable oTable, TableLayout.LayoutColumns Columns) { base.WriteColumns(LayoutProfile, LayoutData, oTable, Columns); // создаем копию существующих столбцов // для накопления общих итогов только по помеченным строкам m_TotalColumns = cloneLayoutColumns(Columns); }
/// <summary> /// Рисует колонки таблицы лэйаута /// </summary> /// <param name="LayoutProfile">профиль отчета</param> /// <param name="RepGen">репорт-райтер</param> /// <param name="oTable">ридер с данными</param> /// <param name="Columns">описание колонок лэйаута</param> /// <param name="Params">параметры</param> /// <param name="CustomData">пользовательские данные</param> /// <param name="Vars">переменные фрагмента отчета</param> protected override void WriteColumns(tablelayoutClass LayoutProfile, ReportLayoutData LayoutData, DataTable oTable, TableLayout.LayoutColumns Columns) { // строка с номерами скрытых колонок string HiddenColumns = string.Empty; if (LayoutProfile.hiddencolumnsparamname != null && LayoutProfile.hiddencolumnsparamname != "") { HiddenColumns = LayoutData.Params[LayoutProfile.hiddencolumnsparamname].ToString(); } // приписываем с начала и с конца строки запятые для облегчения последующего поиска if (!HiddenColumns.StartsWith(",")) { HiddenColumns = "," + HiddenColumns; } if (!HiddenColumns.EndsWith(",")) { HiddenColumns += ","; } // xml-узел с профилями дефолтных для лэйаута эвалуаторов/форматтеров abstractformatterClass[] FormattersNode = LayoutProfile.formatters; if (LayoutProfile.col == null) { // если в профиле явно не описаны колонки отчета for (int i = 0; i < oTable.Columns.Count; i++) { // добавляем колонку в коллекцию Columns.Add(new LayoutColumn("{#" + oTable.Columns[i].ColumnName + "}", FormattersNode)); // добавлем колонку в отчет LayoutData.RepGen.TAddColumn(oTable.Columns[i].ColumnName, align.ALIGN_CENTER, valign.VALIGN_MIDDLE, "TABLE_HEADER"); } } else { // добавляем явно описанные колонки foreach (colClass ColNode in LayoutProfile.col) { // рекурсивно добавляем колонки InsertColumn(ColNode, null, LayoutProfile, LayoutData, Columns, HiddenColumns, FormattersNode); //InsertColumn(ColNode, null, LayoutProfile, RepGen, Columns, Params, HiddenColumns, FormattersNode, CustomData, Vars); } // добавляем неявно описанные колонки foreach (DataColumn oDataColumn in oTable.Columns) { writeVarColumn(LayoutProfile, LayoutData, Columns, oDataColumn, HiddenColumns, FormattersNode); } } // создаем копию существующих столбцов // для накопления общих итогов только по помеченным строкам m_TotalColumns = cloneLayoutColumns(Columns); }
/// <summary> /// Клонирует коллекцию описаний столбцов /// </summary> /// <param name="columns"></param> /// <returns></returns> protected static LayoutColumns cloneLayoutColumns(LayoutColumns columns) { LayoutColumns cloneColumns = new LayoutColumns(); for (int i = 0; i < columns.Count; i++) { if (!columns[i].ColumnIsCounter) { // если столбец не счетчик, добавляем клонированный столбец // для накопления подитогов только по помеченным строков cloneColumns.Add(cloneLayoutColumn(columns[i])); } else { // если столбец - счетчик, добавляем сам столбец, // чтобы не сбивалась нумерация cloneColumns.Add(columns[i]); } } return(cloneColumns); }