예제 #1
0
파일: Cell.cs 프로젝트: Dmytrosp/lab1-oop
        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();
                }
            }
        }
예제 #2
0
        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;
                        }
                    }
                }
            }
        }