Exemplo n.º 1
0
        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;
                }
            }
        }
Exemplo n.º 2
0
        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);
            }
        }