public void SetPointersAndReferences(string expression) { Regex regex = new Regex("[A-Z]+[0-9]"); MatchCollection collection = regex.Matches(this.Expression); List <Cell> temp = new List <Cell>(); foreach (Cell cell in this.ReferencesFromThis) { if (cell.PointersToThis.Contains(this)) { cell.PointersToThis.Remove(this); } } this.ReferencesFromThis.Clear(); foreach (Match match in collection) { if (Grid.dictionary.ContainsKey(match.Value)) { Index i = Converter26Sys.From26Sys(match.Value); this.ReferencesFromThis.Add(Grid.table[i.column][i.row]); Grid.table[i.column][i.row].PointersToThis.Add(this); temp.Add(Grid.table[i.column][i.row]); } else { this.ReferencesFromThis.Clear(); foreach (Cell cell in temp) { if (cell.PointersToThis.Contains(this)) { cell.PointersToThis.Remove(this); } } throw new NonExistentCellException(); } } }
public void Open(DataGridView dataGridView) { using (StreamReader sr = new StreamReader(_fileName)) { int gridColumnsCount = int.Parse(sr.ReadLine()); int gridRowsCount = int.Parse(sr.ReadLine()); Grid.setGrid(gridColumnsCount, gridRowsCount); dataGridView.ColumnCount = gridColumnsCount; for (int i = 0; i < gridColumnsCount; i++) { string columnName = Converter26Sys.To26Sys(i); dataGridView.Columns[i].Name = columnName; dataGridView.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; } for (int i = 0; i < gridRowsCount; i++) { dataGridView.Rows.Add(""); dataGridView.Rows[i].HeaderCell.Value = i.ToString(); } for (int i = 0; i < gridColumnsCount; ++i) { for (int j = 0; j < gridRowsCount; ++j) { string sys26Name = sr.ReadLine(); string expression = sr.ReadLine(); string value = sr.ReadLine(); int pointersCount = int.Parse(sr.ReadLine()); List <Cell> pointers = new List <Cell>(); for (int k = 0; k < pointersCount; ++k) { string pointer = sr.ReadLine(); Index indexOfPointer = Converter26Sys.From26Sys(pointer); pointers.Add(Grid.table[indexOfPointer.column][indexOfPointer.row]); } int referencesCount = int.Parse(sr.ReadLine()); List <Cell> references = new List <Cell>(); for (int k = 0; k < referencesCount; ++k) { string reference = sr.ReadLine(); Index indexOfReference = Converter26Sys.From26Sys(reference); references.Add(Grid.table[indexOfReference.column][indexOfReference.row]); } Cell cell = new Cell(i, j, expression, value, sys26Name, pointers, references); Grid.table[i][j] = cell; Grid.dictionary[cell.Sys26Name] = cell.Value; if (cell.Value == "0" && cell.Expression == "") { dataGridView[i, j].Value = ""; } else { dataGridView[i, j].Value = cell.Value; } } } } }