static void UpdataCustomnNames(IFormulaOperatorSource mgr, Dt.Cells.Data.ExpressionVisitor visitor) { ICustomNameSupport source = mgr.Source as ICustomNameSupport; OperatorExpressionVisistor visistor = visitor as OperatorExpressionVisistor; if ((source != null) && (visistor != null)) { Dictionary <string, CalcExpression> dictionary; Dictionary <ICustomNameSupport, Dictionary <string, CalcExpression> > dictionary2; CalcExpression expression; source.EnumerateAllNames(out dictionary, out dictionary2); visistor.OffsetAbsoluteOnly = true; visistor.CurrentCalcSource = mgr.Source; foreach (KeyValuePair <string, CalcExpression> pair in dictionary) { expression = visitor.Visit(pair.Value, 0, 0); if (expression != pair.Value) { source.SetDefinedName(pair.Key, expression, true); } } foreach (KeyValuePair <ICustomNameSupport, Dictionary <string, CalcExpression> > pair2 in dictionary2) { source = pair2.Key; foreach (KeyValuePair <string, CalcExpression> pair3 in pair2.Value) { expression = visitor.Visit(pair3.Value, 0, 0); if (expression != pair3.Value) { source.SetDefinedName(pair3.Key, expression, false); } } } if (visistor != null) { visistor.OffsetAbsoluteOnly = false; visistor.CurrentCalcSource = null; } } }
public static void UpdataInvalidFormula(IFormulaOperatorSource mgr, ChangingContext context, Dt.Cells.Data.ExpressionVisitor visitor) { foreach (KeyValuePair <CalcLocalIdentity, CalcLocalIdentity> pair in context.ChangingIdentities) { if (mgr.GetExpression(pair.Key) != null) { mgr.ClearExpression(pair.Key); } else { mgr.ClearNode(pair.Key); } } foreach (KeyValuePair <CalcLocalIdentity, Tuple <CalcLocalIdentity, CalcExpression> > pair2 in context.ChangedFormulas) { if (pair2.Value == null) { mgr.ClearExpression(pair2.Key); } else { int num; int num2; int num3; int num4; Identity2Indexs(GetActualId(pair2.Value.Item1), out num, out num2, out num3, out num4); CalcExpression expr = visitor.Visit(pair2.Value.Item2, num, num2); mgr.SetExpression(pair2.Key, expr); } context.InvalidateFormula(mgr, pair2.Key); } OperatorExpressionVisistorBase base2 = visitor as OperatorExpressionVisistorBase; if (base2 != null) { base2.CurrentCalcSource = mgr.Source; base2.OffsetExternalOnly = true; } foreach (KeyValuePair <IFormulaOperatorSource, Dictionary <CalcLocalIdentity, Tuple <CalcLocalIdentity, CalcExpression> > > pair3 in context.ExtChangedFormulas) { foreach (KeyValuePair <CalcLocalIdentity, Tuple <CalcLocalIdentity, CalcExpression> > pair4 in pair3.Value) { CalcLocalIdentity id = pair4.Key; if (pair4.Value.Item2 == null) { pair3.Key.ClearExpression(id); } else { int num5; int num6; int num7; int num8; Identity2Indexs(GetActualId(pair4.Value.Item1), out num5, out num6, out num7, out num8); CalcExpression expression2 = visitor.Visit(pair4.Value.Item2, num5, num6); pair3.Key.SetExpression(id, expression2); } context.InvalidateFormula(pair3.Key, id); } } foreach (KeyValuePair <IFormulaOperatorSource, Dictionary <CalcLocalIdentity, CalcLocalIdentity> > pair5 in context.InvalidateIdentities) { List <CalcLocalIdentity> list = new List <CalcLocalIdentity>(); foreach (KeyValuePair <CalcLocalIdentity, CalcLocalIdentity> pair6 in pair5.Value) { if (pair6.Value != null) { list.Add(pair6.Key); } } pair5.Key.Invalidate((IEnumerable <CalcLocalIdentity>)list, false); } }