/// <summary> /// Check what values are passed and manupilate as needed by the math expression given /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) { Mathematics math = new Mathematics(); MathExpression mathExpression = new MathExpression(); ExpressionValues expresionValue = new ExpressionValues(); GridProperty gridProperty = new GridProperty(); try { if (dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null) { string cell = dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); //Define the Mathematical expressions needed and check the value that wi determine the calculation // mathExpression = math.MathExpression(cell, dataGridView.ColumnCount); dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = math.MathExpression(cell, dataGridView.ColumnCount); //Check if a calculation needs to happen //if (mathExpression.mathExpressionSymbol != -1) //{ // gridProperty.column = new int[dataGridView.ColumnCount]; // gridProperty.row = new int[dataGridView.RowCount]; // expresionValue.value = new string[dataGridView.ColumnCount]; // Alphabet.AlphabetEnum rowIndex = (Alphabet.AlphabetEnum)e.RowIndex; // string[] names = Enum.GetNames(rowIndex.GetType()); // //Check if a cell value is used with the enum provided // for (int i = 0; i < names.Length; i++) // { // if (names[i] == cell.Substring(mathExpression.mathExpressionSymbol + 1, mathExpression.mathExpressionSymbol + 1)) // { // gridProperty.column[0] = i; // break; // } // else // { // gridProperty.column[0] = -1; // } // } // // gridProperty.column = Alphabet.AlphabetLetter(mathExpression, cell,e.RowIndex,0); // //Check if a cell value is used or if it is a fixed numerical value // if (gridProperty.column[0] != -1) // { // //If a cell value is used use the cell value // if(mathExpression.mathSymbol[4] != 0) // { // gridProperty.row[0] = Convert.ToInt32(cell.Substring(mathExpression.mathExpressionSymbol + 2, mathExpression.mathSymbol[4] - (mathExpression.mathExpressionSymbol + 2))); // if (dataGridView.Rows[gridProperty.row[0] - 1].Cells[gridProperty.column[0]].Value != null) // { // expresionValue.value[0] = dataGridView.Rows[gridProperty.row[0] - 1].Cells[gridProperty.column[0]].Value.ToString(); // } // } // else // { // gridProperty.row[0] = Convert.ToInt32(cell.Substring(mathExpression.mathExpressionSymbol + 2)); // //gridProperty.column[0] = dataGridView.Rows[gridProperty.row[0] - 1].Cells[gridProperty.column[0]].Value.ToString() // dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = dataGridView.Rows[gridProperty.row[0]-1].Cells[gridProperty.column[0]].Value.ToString(); // } // } // else // { // gridProperty.row[0] = Convert.ToInt32(cell.Substring(mathExpression.mathExpressionSymbol + 1, mathExpression.mathSymbol[4] - 1)); // expresionValue.value[0] = gridProperty.row[0].ToString(); // } // // Check the length of the cell text to make sure it is cell values or some cell values // if (cell.Length > 3) // { // for (int j = 0; j < names.Length; j++) // { // if (names[j] == cell.Substring(mathExpression.mathSymbol[4] + 1, 1)) // { // gridProperty.column[1] = j; // break; // } // else // { // gridProperty.column[1] = -1; // } // } // //gridProperty.column = Alphabet.AlphabetLetter(mathExpression, cell, e.RowIndex, 1); // //Check if a cell value is used or if it is a fixed numerical value // if (gridProperty.column[1] != -1) // { // //If a cell value is used use the cell value // gridProperty.row[1] = Convert.ToInt32(cell.Substring(mathExpression.mathSymbol[4] + 2)); // if (dataGridView.Rows[gridProperty.row[1] - 1].Cells[gridProperty.column[1]].Value != null) // { // expresionValue.value[1] = dataGridView.Rows[gridProperty.row[1] - 1].Cells[gridProperty.column[1]].Value.ToString(); // } // } // else // { // gridProperty.row[1] = Convert.ToInt32(cell.Substring(mathExpression.mathSymbol[4] + 1)); // expresionValue.value[1] = gridProperty.row[1].ToString(); // } // } // else // { // mathExpression.mathCalculationSymbol = "default"; // } // //Switch to call the right Mathermatical Expression // switch (mathExpression.mathCalculationSymbol) // { // case "+": // dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = math.Add(expresionValue); // break; // case "-": // dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = math.Subtract(expresionValue); // break; // case "*": // dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = math.Multiply(expresionValue); // break; // case "/": // dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = math.Devide(expresionValue); // break; // default: // // dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = expresionValue.value[0]; // break; // } //} } } catch (Exception ex) { // exception written to active cell MessageBox.Show("An Error occured on the cell: " + ex); } }
/// <summary> /// Check what values are passed and manupilate as needed by the math expression given /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) { Mathematics math = new Mathematics(); MathExpression mathExpression = new MathExpression(); ExpressionValues expresionValue = new ExpressionValues(); GridProperty gridProperty = new GridProperty(); gridProperty.column = new int[dataGridView.ColumnCount]; gridProperty.row = new int[dataGridView.RowCount]; try { if (dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null) { //get info from cell to string for manupilation string cell = dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); //check if the string is null or empty if (!string.IsNullOrEmpty(cell)) { //Check if single value needs to be written or calculation needs to follow if (cell.Substring(0, 1) == "=") { var letterNumberLocation = Regex.Matches(cell, @"[a-zA-Z]{0,1}\d{0,3}"); //check if a value needs to be copied or if calculation needs to happen if (letterNumberLocation.Count < 4) { cell = cell.Substring(1); Alphabet.AlphabetEnum rowIndex = (Alphabet.AlphabetEnum)e.RowIndex; string[] names = Enum.GetNames(rowIndex.GetType()); // Check if a cell value is used with the enum provided for (int i = 0; i < names.Length; i++) { if (names[i] == cell.Substring(0, 1)) { //copy the value found to the new column gridProperty.column[i] = i; gridProperty.row[i] = Convert.ToInt32(cell.Substring(1)); dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = dataGridView.Rows[gridProperty.row[gridProperty.row[i]]].Cells[gridProperty.column[gridProperty.column[i]]].Value.ToString(); break; } } } else { int count = 0; expresionValue.value = new string[dataGridView.ColumnCount]; //Define the Mathematical expressions needed and check the value that wi determine the calculation cell = cell.Substring(1); string newCell = null; //Regex ecpressions to get the row and column values for string munipilation bool errorCounter = Regex.IsMatch(cell, @"[a-zA-Z]"); var letterLocation = Regex.Matches(cell, @"[a-zA-Z]{0,1}"); //var letterNumberLocation = Regex.Matches(cell, @"[a-zA-Z]{0,1}\d{0,3}"); var numberLocation = Regex.Matches(cell, @"\d{0,3}"); int numberCount = Regex.Matches(cell, @"\d{1,3}").Count; //check if Alpabetical symbols are available if (false != errorCounter) { for (int g = 0; g < numberLocation.Count; g++) { if (!string.IsNullOrEmpty(numberLocation[g].ToString())) { Alphabet.AlphabetEnum rowIndex = (Alphabet.AlphabetEnum)e.RowIndex; string[] names = Enum.GetNames(rowIndex.GetType()); // Check if a cell value is used with the enum provided for (int i = 0; i < names.Length; i++) { if (g == 0) { //Check the first value that comes in if (names[i] == letterLocation[g].ToString()) { //use the alphabet value to determine the numerical value on where to find the value gridProperty.column[count] = i; gridProperty.row[count] = Convert.ToInt32(cell.Substring(numberLocation[g].Index, numberLocation[g].Length)); expresionValue.value[count] = dataGridView.Rows[gridProperty.row[g] - 1].Cells[gridProperty.column[g]].Value.ToString(); break; } else { //if it does not have a aphabetical value wright it straigt into the array expresionValue.value[count] = numberLocation[g].ToString(); } } else { // calculate and manipulate the rest of the values from 1 up if (names[i] == letterLocation[g - 1].ToString()) { gridProperty.column[count] = i; gridProperty.row[count] = Convert.ToInt32(cell.Substring(numberLocation[g].Index, numberLocation[g].Length)); expresionValue.value[count] = dataGridView.Rows[gridProperty.row[count] - 1].Cells[gridProperty.column[count]].Value.ToString(); break; } else { expresionValue.value[count] = numberLocation[g].ToString(); } } } //create the new string from the values collected from the cell to do the calculations if (count == 0) { newCell = expresionValue.value[count] + cell.Substring(numberLocation[g].Index + numberLocation[g].Length, 1); } else { if (numberCount - 1 == count) { newCell = newCell + expresionValue.value[count]; } else { newCell = newCell + expresionValue.value[count] + cell.Substring(numberLocation[g].Index + numberLocation[g].Length, 1); } } count++; } } } else { newCell = cell; } //pass the new string with the values to the calculation method dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = math.MathExpression("=" + newCell, 1); } } } } } catch (Exception ex) { // exception Given in pop up box MessageBox.Show("An Error occured on the cell: " + ex); } }