Пример #1
0
        public override object Parse(MathCell ownerMathCell)
        {
            string formula = ownerMathCell.DereferencedFormula =
                ownerMathCell.Formula = RemoveRedundantZeroes(ownerMathCell);

            if (AddressesHandler.HasAnyAddress(formula))
            {
                int i = 0;
                while (AddressesHandler.HasAnyAddress(formula)) // While formula contains any reference
                {
                    MathCell refCell    = ownerMathCell.References[i];
                    string   refAddress = refCell.OwnAddress;

                    if (refCell.Value == null)
                    {
                        refCell.EvaluateFormula();
                    }

                    string refValue = refCell.Value.ToString();
                    if (string.IsNullOrEmpty(refValue))
                    {
                        ownerMathCell.DereferencedFormula = formula = formula.Replace(refAddress, "0");
                    }
                    ownerMathCell.DereferencedFormula = formula = formula.Replace(refAddress, refValue);

                    ++i;
                }
            }

            return(base.Parse(ownerMathCell));
        }
Пример #2
0
        public MathCell ProcessCellInput(DataGridViewCell inputCell)
        {
            string newFormula = string.Empty;

            if (inputCell.Value != null)
            {
                newFormula = inputCell.Value.ToString();
            }

            MathCell mCell = GetMathCell(inputCell);

            mCell.Formula     = newFormula;
            mCell.RowIndex    = inputCell.RowIndex;
            mCell.ColumnIndex = inputCell.ColumnIndex;

            object prevValue = mCell.Value;

            mCell.EvaluateFormula();
            object currentValue = mCell.Value;

            if (prevValue != null && prevValue.ToString() == "RecursiveReference" ||
                currentValue.ToString() == "RecursiveReference")
            {
                foreach (MathCell usedCell in UsedCells)
                {
                    usedCell.RemoveFromBoundedCells();
                    OnGridMathCellsProvider.UpdateValuesOnGrid(UsedCells, OwnerGrid);
                }
            }

            OnGridMathCellsProvider.UpdateDependentsOnGrid(mCell, OwnerGrid);

            return(mCell);
        }
Пример #3
0
 public static void UpdateDependentsOnGrid(MathCell mCell, GridForm ownerGrid)
 {
     for (int i = 0; i < mCell.Dependents.Count; ++i)
     {
         MathCell dependentCell = mCell.Dependents[i];
         dependentCell.EvaluateFormula();
         PutMathCellOnGrid(dependentCell, ownerGrid);
         UpdateDependentsOnGrid(dependentCell, ownerGrid);
     }
 }