public Form1() { InitializeComponent(); MySpreadsheet = new MySpreadsheet(50, 26); MySpreadsheet.CellPropertyChanged += new PropertyChangedEventHandler(SpreadSheetPropertyChanged); //Move the following into data-grid initialization //Populates the data grid with columns 'A' through 'Z' for (char col = 'A'; col <= 'Z'; ++col) { dataGridView1.Columns.Add("Column" + col, col.ToString()); } //Creates 50 rows in the datagridview and numbers each row dataGridView1.Rows.Add(50); foreach (DataGridViewRow row in dataGridView1.Rows) { row.HeaderCell.Value = (row.Index + 1).ToString(); } //Fires when an event occurs which requires updating the UI cells, hacky use of PropertyChangedEventArgs parameter //used to pass the row and column of the cell which needs to be updated void SpreadSheetPropertyChanged(object sender, PropertyChangedEventArgs e) { AbstractCell cell = (AbstractCell)sender; int row = cell.RowIndex; int column = cell.ColumnIndex; dataGridView1[column, row].Value = MySpreadsheet.getCell(row, column).EvaluatedValue; } }
//Demo button generates cell content in 50 random cells along with demonstrating relational integrity in first two columns private void button2_Click_1(object sender, EventArgs e) { Random rndNumber = new Random(); for (int count = 0; count < 50; count++) { int row = rndNumber.Next(0, 50); int col = rndNumber.Next(0, 26); MySpreadsheet.getCell(row, col).TextValue = "Not another random cell"; } //for (int row = 0; row < MySpreadsheet.RowCount; row++) //{ // MySpreadsheet.getCell(row, 1).TextValue = "This is cell B" + (row + 1); // MySpreadsheet.getCell(row, 0).TextValue = "=B" + (row + 1); //Used to demonstrate cells can respond appropriately to having value set to content of another cell // //i.e. ex. B1_cell.value = "=B2" should evaluate to the value of the b2 cell //} }