private void OpenFileClick(object sender, EventArgs e) //Кнопка загрузки таблиці { if (openFileDialog1.ShowDialog() == DialogResult.OK) { DialogResult dr = MessageBox.Show("Поточні дані буде видалено. Відкрити файл?", "Важливо!", MessageBoxButtons.YesNo); switch (dr) { case DialogResult.Yes: break; case DialogResult.No: return; } ClearTableClick("a", new EventArgs()); ReadCell(openFileDialog1.FileName); foreach (var i in data.Table) { LinkManager.FindLincs(i.Key, i.Value.Expression, data.Table); } } }
public void AddCell(string expression, string name, int ColId, int RowId) { bool add = false; Cell temp = new Cell(null, expression, ColId, RowId); if (!Table.TryAdd(name, temp)) { temp = Table[name]; } else { add = true; } try { LinkManager.FindLincs(name, expression, Table); } catch (ArgumentException e) { Table.Remove(name); throw e; } if (HasReferenceError(temp, name)) { if (add) { Table.Remove(name); } DelLink(temp); throw new StackOverflowException("Помилка. Комірка рекурсивно посилається на себе."); } dynamic value; try { value = Calculator.Evaluate(expression); } catch (Exception ex) { DelLink(temp); Table.Remove(name); throw ex; } Cell obj = new Cell(value, expression, ColId, RowId); obj.Name = name; if (Table.TryAdd(name, obj)) { } else { Table[name].Value = obj.Value; Table[name].Expression = obj.Expression; } LinkManager.FindLincs(name, expression, Table); LabCalculatorVisitor.tableIdentifier[name] = value; }