コード例 #1
0
        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
        }
コード例 #2
0
        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);
            }
        }