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