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); }