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 AddRow(GridForm grid) { ++grid.dataGridView.RowCount; OnGridMathCellsProvider.InitEmptyCells(grid); HeadersUpdater headersUpdater = new HeadersUpdater(grid, new UpdateRows()); headersUpdater.Update(); }
public static void OpenFile(GridForm grid) { if (grid.openFileDialog.ShowDialog() == DialogResult.OK) { string filePath = grid.openFileDialog.FileName; DataSet dataSet = InstanceDataSet(filePath); if (dataSet == null) { return; } MathCellsProvider.GetInstance.ResetMathCells(); grid.ClearGrid(); grid.ClearOutputBoxes(); DataTable dataTable = dataSet.Tables[0]; grid.dataGridView.ColumnCount = dataTable.Columns.Count; grid.dataGridView.RowCount = dataTable.Rows.Count; foreach (DataGridViewRow row in grid.dataGridView.Rows) { foreach (DataGridViewCell cell in row.Cells) { MathCell newCell = new MathCell(dataTable.Rows[cell.RowIndex][cell.ColumnIndex].ToString()) { RowIndex = cell.RowIndex, ColumnIndex = cell.ColumnIndex }; if (!string.IsNullOrWhiteSpace(newCell.Formula)) { MathCellsProvider.GetInstance.AddCell(newCell); } cell.Tag = newCell; } } List <MathCell> addedCells = MathCellsProvider.GetInstance.GetUsedCells(); OnGridMathCellsProvider.UpdateValuesOnGrid(addedCells, grid); // first value reevalutes because it can be calculated with non proper references addedCells.First().EvaluateFormula(); OnGridMathCellsProvider.PutMathCellOnGrid(addedCells.First(), grid); HeadersUpdater headersUpdater = new HeadersUpdater(grid, new UpdateRows(), new UpdateColumns()); headersUpdater.Update(); } }
public static void InsertRow(GridForm grid) { int rowIndex = grid.dataGridView.CurrentCell.RowIndex; grid.dataGridView.Rows.Insert(rowIndex); OnGridMathCellsProvider.InitEmptyCells(grid); MathCellsShifter mathCellsShifter = new MathCellsShifter(new ShiftAfterRowInsert(), rowIndex, grid); mathCellsShifter.Shift(); HeadersUpdater headersUpdater = new HeadersUpdater(grid, new UpdateRows()); headersUpdater.Update(); }
private void InitialGridSetup() { MathCellsProvider.GetInstance.ResetMathCells(); ClearGrid(); ClearOutputBoxes(); const int initN = 10; const int initM = 10; dataGridView.RowCount = initN; dataGridView.ColumnCount = initM; HeadersUpdater headersUpdater = new HeadersUpdater(this, new UpdateRows(), new UpdateColumns()); headersUpdater.Update(); OnGridMathCellsProvider.InitEmptyCells(this); }
public void Shift() { foreach (DataGridViewRow row in _ownerGrid.dataGridView.Rows) { foreach (DataGridViewCell cell in row.Cells) { MathCell mCell = MathCellsProvider.GetMathCell(cell); _shiftWay.DoShift(_delimiterIndex, mCell, _ownerGrid); } } List <MathCell> usedMathCells = MathCellsProvider.GetInstance.GetUsedCells(); foreach (MathCell usedCell in usedMathCells) { usedCell.ShiftReferences(); } OnGridMathCellsProvider.UpdateValuesOnGrid(usedMathCells, _ownerGrid); }
public static void InsertColumn(GridForm grid) { int colIndex = grid.dataGridView.CurrentCell.ColumnIndex; DataGridViewTextBoxColumn dummyCol = new DataGridViewTextBoxColumn { HeaderText = "dummyColText" }; grid.dataGridView.Columns.Insert(colIndex, dummyCol); OnGridMathCellsProvider.InitEmptyCells(grid); MathCellsShifter mathCellsShifter = new MathCellsShifter(new ShiftAfterColumnInsert(), colIndex, grid); mathCellsShifter.Shift(); HeadersUpdater headersUpdater = new HeadersUpdater(grid, new UpdateColumns()); headersUpdater.Update(); }