Exemplo n.º 1
0
        internal virtual bool GetValueForSort(CellsetMember x, ICubeAddress y,
                                              List <Member> fColMembers, List <Member> fRowMembers, out object Value)
        {
            var a = x.GetAddress();

            a.Merge(y);
            var b = GetCellValue(a, out Value);

            if (!b)
            {
                return(false);
            }
            var sm = a.MeasureMode;

            if (sm == null || IsNativeDataPresent(sm))
            {
                return(b);
            }
            switch (sm.Mode)
            {
            case MeasureShowModeType.smPercentParentColItem:
                x = x.FParent;
                if (x == null)
                {
                    return(true);
                }
                a = x.GetAddress();
                a.Merge(y);
                object V;
                var    b1 = GetCellValue(a, out V);
                if (!b1)
                {
                    return(b);
                }
                try
                {
                    Value = Convert.ToDouble(Value) / Convert.ToDouble(V);
                }
                catch
                {
                    ;
                }
                break;

            case MeasureShowModeType.smPercentColTotal:
                a = x.GetAddress();
                if (y.Measure != null)
                {
                    a.Measure     = y.Measure;
                    a.MeasureMode = y.MeasureMode;
                }
                b1 = GetCellValue(a, out V);
                if (!b1)
                {
                    return(b);
                }
                try
                {
                    Value = Convert.ToDouble(Value) / Convert.ToDouble(V);
                }
                catch
                {
                    ;
                }
                break;

            case MeasureShowModeType.smColumnRank:
                if (!(Value is IComparable))
                {
                    return(true);
                }

                if (a.Measure == null)
                {
                    return(true);
                }
                a.MeasureMode = a.Measure.ShowModes[0];

                var Rank = 1;

                var cmp = Value as IComparable;
                foreach (var m in fColMembers)
                {
                    if (m == null)
                    {
                        continue;
                    }
                    try
                    {
                        a.AddMember(m);
                        object vv;
                        if (GetCellValue(a, out vv))
                        {
                            if (cmp.CompareTo(vv) < 0)
                            {
                                Rank++;
                            }
                        }
                    }
                    catch
                    {
                        ;
                    }
                }
                Value = Rank;
                break;

            case MeasureShowModeType.smRowRank:
                try
                {
                    Value = -Convert.ToDouble(Value);
                }
                catch
                {
                    ;
                }
                break;

            case MeasureShowModeType.smSpecifiedByEvent:
                if (!Grid.EventShowMeasureAssigned)
                {
                    throw new Exception(string.Format(RadarUtils.GetResStr("rssmError"), a.Measure.DisplayName,
                                                      sm.Caption));
                }
                var E = new ShowMeasureArgs(Value, sm, null);
                E.fRowSiblings    = fRowMembers;
                E.fColumnSiblings = fColMembers;
                E.fEvaluator      = new Evaluator(Grid, a);
                Grid.EventShowMeasure(E);
                Value = E.ReturnData;
                break;
            }
            return(b);
        }