/// <summary> /// calculate the positions for the columns /// /// /// </summary> /// <returns>void</returns> protected void InitColumnLayout() { System.Int32 lowestlevel; double MostRightPosition; double MostRightPosition2; System.Int32 Counter; String ColumnFormat; TVariant ColumnPosition; TVariant ColumnPositionIndented; lowestlevel = this.Results.GetDeepestVisibleLevel(); Parameters.Add("lowestLevel", new TVariant(lowestlevel), -1, ReportingConsts.APPLICATIONPARAMETERS); // use the columns of the first subreport (it always exists) to calculate the position of the columns and the width of the report // but setting parameters has to be done in the global settings (subreport = 1) Parameters.Add("CurrentSubReport", new TVariant(0), -1); // get the most right position of the descr columns of the lowest level MostRightPosition = 0; if (Parameters.Exists("ColumnPosition", ReportingConsts.COLUMNLEFT + 1, lowestlevel)) { MostRightPosition = MostRightPosition + Parameters.Get("ColumnPosition", ReportingConsts.COLUMNLEFT + 1, lowestlevel).ToDouble(); } if (Parameters.Exists("ColumnWidth", ReportingConsts.COLUMNLEFT + 1, lowestlevel)) { MostRightPosition = MostRightPosition + Parameters.Get("ColumnWidth", ReportingConsts.COLUMNLEFT + 1, lowestlevel).ToDouble(); } MostRightPosition2 = 0; if (Parameters.Exists("ColumnPosition", ReportingConsts.COLUMNLEFT + 2, lowestlevel)) { MostRightPosition2 = MostRightPosition2 + Parameters.Get("ColumnPosition", ReportingConsts.COLUMNLEFT + 2, lowestlevel).ToDouble(); } if (Parameters.Exists("ColumnWidth", ReportingConsts.COLUMNLEFT + 2, lowestlevel)) { MostRightPosition2 = MostRightPosition2 + Parameters.Get("ColumnWidth", ReportingConsts.COLUMNLEFT + 2, lowestlevel).ToDouble(); } if (MostRightPosition2 > MostRightPosition) { MostRightPosition = MostRightPosition2; } for (Counter = 0; Counter <= Results.GetMaxDisplayColumns() - 1; Counter += 1) { // space between columns MostRightPosition = MostRightPosition + 0.0; if (Parameters.Exists("ColumnPosition", Counter)) { MostRightPosition = Parameters.Get("ColumnPosition", Counter).ToDouble(); } ColumnPosition = new TVariant(MostRightPosition); ColumnPositionIndented = Parameters.Get("ColumnPositionIndented", Counter); TVariant ColumnWidth = new TVariant(); if (!Parameters.Exists("ColumnWidth", Counter)) { if (Parameters.Exists("ColumnFormat", Counter, -1, eParameterFit.eExact)) { // todo: width of currency depends on thousandsonly, nodecimals, etc. ColumnFormat = Parameters.Get("ColumnFormat", Counter, -1, eParameterFit.eExact).ToString(); // all measurements in cm if (ColumnFormat == "percentage") { // was 2.0, but the caption needs space as well, so same width as currency ColumnWidth = new TVariant(2.5); } else if (ColumnFormat == "currency") { ColumnWidth = new TVariant(2.5); } else { ColumnWidth = new TVariant(3); } ColumnPositionIndented = new TVariant(0.5); } else { ColumnWidth = new TVariant(4); } } else { ColumnWidth = Parameters.Get("ColumnWidth", Counter); } MostRightPosition = MostRightPosition + ColumnWidth.ToDouble(); if (!ColumnPositionIndented.IsNil()) { MostRightPosition = MostRightPosition + ColumnPositionIndented.ToDouble(); } // save the values to the global report level Parameters.Add("CurrentSubReport", new TVariant(-1), -1); Parameters.Add("ColumnPosition", new TVariant(ColumnPosition), Counter); Parameters.Add("ColumnWidth", new TVariant(ColumnWidth), Counter); if (!ColumnPositionIndented.IsNil()) { Parameters.Add("ColumnPositionIndented", ColumnPositionIndented, Counter); } Parameters.Add("CurrentSubReport", new TVariant(0), -1); } Parameters.Add("CurrentSubReport", new TVariant(-1), -1); Parameters.Add("ReportWidth", new TVariant(MostRightPosition)); }