示例#1
0
        /// <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));
        }