/// <summary> /// 获取报表数据源的列集合 /// </summary> /// <param name="Filters"></param> /// <param name="reportWidget"></param> /// <param name="ReportSource"></param> /// <param name="ChildCodes"></param> /// <returns></returns> protected List <ReportWidgetColumn> GetSourceColumns(ReportFilter[] Filters, ReportWidget reportWidget, ReportSource ReportSource, out Dictionary <string, ColumnSummary> ChildCodes) { ChildCodes = new Dictionary <string, ColumnSummary>(); List <ReportWidgetColumn> SourceColumns = this.Engine.ReportQuery.GetSourceColumns(this.Engine, reportWidget, ReportSource); List <ReportWidgetColumn> results = new List <ReportWidgetColumn>(); foreach (ReportWidgetColumn c in SourceColumns) { if (reportWidget.ContainColumn(Filters, c.ColumnCode, ReportSource, this.Engine.BizObjectManager, this.Engine.Organization, this.Engine.EngineConfig.DBType, c.DisplayName)) { results.Add(c); } } //设置主表id为,I_ccc.objectid string MainObjectId = this.GetMainObjectId(ReportSource.SchemaCode); string MainObjectId_Name = this.GetMainObjectId_Name(ReportSource.SchemaCode); //当有主表和子表字段时,加column 主表objectid,用于明细表关联 this.DetailNeedMainObjectId(reportWidget, ReportSource, out ChildCodes); ReportWidgetColumn MainObjectIdColumn = new ReportWidgetColumn(); MainObjectIdColumn.ColumnCode = MainObjectId_Name; MainObjectIdColumn.ColumnName = MainObjectId; MainObjectIdColumn.DisplayName = MainObjectId; if (!ReportSource.IsUseSql) { results.Add(MainObjectIdColumn); } return(results); }
/// <summary> /// 构建行表头和数据 /// </summary> /// <param name="sheet"></param> /// <param name="Node"></param> /// <param name="RowNumber"></param> /// <param name="ColumnNumber"></param> /// <param name="CurrentRow"></param> /// <param name="ArrayValueTable"></param> /// <param name="ColumnHeaderNumber"></param> /// <param name="allReportWidgetColumns"></param> /// <param name="UnitTableAndAssociationTable"></param> /// <param name="style"></param> /// <param name="Columns"></param> private void BuidRowHeaderAndValues( ISheet sheet, SimpleHeaderNode Node, int RowNumber, int ColumnNumber, IRow CurrentRow, List <string>[] ArrayValueTable, int ColumnHeaderNumber, Dictionary <string, ReportWidgetColumn> allReportWidgetColumns, Dictionary <string, string> UnitTableAndAssociationTable, ICellStyle style, ReportWidgetColumn[] Columns) { int Counter = 0; ICell cell = CurrentRow.CreateCell(ColumnNumber); string nodevalue = Node.Value; if (Node.ColumnCode != null && allReportWidgetColumns.ContainsKey(Node.ColumnCode) && (allReportWidgetColumns[Node.ColumnCode].ColumnType == ColumnType.Association || allReportWidgetColumns[Node.ColumnCode].ColumnType == ColumnType.Unit) && UnitTableAndAssociationTable.ContainsKey(Node.Value)) { nodevalue = UnitTableAndAssociationTable[Node.Value]; } if (Node.ColumnCode != null && allReportWidgetColumns.ContainsKey(Node.ColumnCode)) { switch (allReportWidgetColumns[Node.ColumnCode].ColumnType) { case ColumnType.Numeric: double tempresult = 0; if (double.TryParse(nodevalue, out tempresult)) { cell.SetCellValue(tempresult); } else { cell.SetCellValue(nodevalue); } break; default: cell.SetCellValue(nodevalue); break; } } else { cell.SetCellValue(nodevalue); } cell.CellStyle = style; if (Node.ColSpan > 1 || Node.RowSpan > 1) { sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(RowNumber, RowNumber + Node.RowSpan - 1, ColumnNumber, ColumnNumber + Node.ColSpan - 1)); } ColumnNumber = ColumnNumber + Node.ColSpan; if (Node.ChildNode == null || Node.ChildNode.Count == 0) { //这里加数据表内的数据 int tempcounter = 0; foreach (string value in ArrayValueTable[RowNumber - ColumnHeaderNumber]) { ReportWidgetColumn itemColumn = null; if (Columns != null & Columns.Length > 0) { itemColumn = Columns[tempcounter % Columns.Length]; } ICell mycell = CurrentRow.CreateCell(ColumnNumber); //类型转换 if (itemColumn != null) { switch (itemColumn.ColumnType) { case ColumnType.Numeric: double tempresult = 0; if (double.TryParse(value, out tempresult)) { mycell.SetCellValue(tempresult); } else { mycell.SetCellValue(value); } break; default: mycell.SetCellValue(value); break; } } else { mycell.SetCellValue(value); } mycell.CellStyle = style; ColumnNumber++; tempcounter++; } return; } else { foreach (SimpleHeaderNode ChildNode in Node.ChildNode) { if (Counter == 0) { BuidRowHeaderAndValues(sheet, ChildNode, RowNumber, ColumnNumber, CurrentRow, ArrayValueTable, ColumnHeaderNumber, allReportWidgetColumns, UnitTableAndAssociationTable, style, Columns); } else { IRow myrow = sheet.CreateRow(RowNumber); BuidRowHeaderAndValues(sheet, ChildNode, RowNumber, ColumnNumber, myrow, ArrayValueTable, ColumnHeaderNumber, allReportWidgetColumns, UnitTableAndAssociationTable, style, Columns); } RowNumber = RowNumber + ChildNode.RowSpan; Counter++; } } }