private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) { if (!undoButtonClicked) { object newCellValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; //samo kliknięcie na komórkę zawierającą checkbox powoduje wywołanie zdarzenia cellBeginEdit i CellEndEdit, przy czym obie wartości są takie same (stan checkboxu się nie zmienił) //nie chcę w takiej sytuacji generować celki chengedCell if (changedCell.getCellValue(cellValueTypes.oldValue) != newCellValue) { //changedCell została utworzona gdy użytkownik rozpoczął edycję, metoda dataGridView_CellBeginEdit changedCell.setCellValue(cellValueTypes.newValue, newCellValue); changedCell.setCellIndex(cellIndexTypes.rowIndex, e.RowIndex); changedCell.setCellIndex(cellIndexTypes.columnIndex, e.ColumnIndex); //jeżeli nie zdefiniuję typu celki w ten sposób jak poniżej, celka nie przechodzi weryfikacji i nie zostaje zmieniona //jest to zaszłość z DBEditor, gdzie typ danych jest czytany z bazy i weryfikowany przez CellConverter //co jest konieczne do automatyzacji zapisu do bazy. //Tutaj wartość celki jest zawsze tekstem, czyli typ bazodanowy "varchar". Wyjątkiem jest typ "Boolean" w checkboxie, changedCell.DataTypeName = "varchar"; //(queryData.getDataTypes()[e.ColumnIndex]); if (dgHandler.addChangedCell(changedCell)) { changeCellTextColour(changedCell, Color.Red); undoButton.Enabled = true; saveButton.Enabled = true; } else { dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = changedCell.getCellValue(cellValueTypes.oldValue); } } else { changedCell.Dispose(); } } undoButtonClicked = false; //w przypadku cofania zmian w checkboxie wywoływane są zdarzenia cell begin edit i end edit //nie chcę tego stąd warunek wykluczający gdy undoButton jest kliknięty //reset tej zmiennej dopiero, gdy już sobie wywoła oba zdarzenia nie wchodząc do ich kodu }
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) { object newCellValue = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; //changedCell została utworzona gdy użytkownik rozpoczął edycję, metoda dataGridView1_CellBeginEdit changedCell.setCellValue(cellValueTypes.newValue, newCellValue); changedCell.setCellIndex(cellIndexTypes.rowIndex, e.RowIndex); changedCell.setCellIndex(cellIndexTypes.columnIndex, e.ColumnIndex); changedCell.DataTypeName = (queryData.getDataTypes()[e.ColumnIndex]); if (dg1Handler.addChangedCell(changedCell)) { changeCellTextColour(changedCell, Color.Red); undoButton.Enabled = true; saveButton.Enabled = true; } else { dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = changedCell.getCellValue(cellValueTypes.oldValue); } }