SpreadsheetControl.CellBeginEdit Event
Occurs before a cell editor is opened.
Namespace: DevExpress.Xpf.Spreadsheet
Assembly: DevExpress.Xpf.Spreadsheet.v24.2.dll
NuGet Package: DevExpress.Wpf.Spreadsheet
Declaration
Event Data
The CellBeginEdit event's data class is SpreadsheetCellCancelEventArgs. The following properties provide information specific to this event:
Property | Description |
---|---|
Cancel | Gets or sets whether the operation performed on the processed event should be canceled. |
Cell | Gets the cell for which the event is fired. Inherited from SpreadsheetCellEventArgsBase. |
ColumnIndex | Gets the index of the column that contains the cell. Inherited from SpreadsheetCellEventArgsBase. |
Formula | Gets the formula that is currently contained in the cell. Inherited from SpreadsheetCellEventArgsBase. |
FormulaInvariant | Gets the formula in the invariant culture that is currently contained in the cell. Inherited from SpreadsheetCellEventArgsBase. |
RowIndex | Gets the index of the row that contains the cell. Inherited from SpreadsheetCellEventArgsBase. |
SheetName | Gets the name of the worksheet that contains the cell. Inherited from SpreadsheetCellEventArgsBase. |
Value | Gets the value currently contained in the cell. Inherited from SpreadsheetCellEventArgsBase. |
Worksheet | Gets the worksheet that contains the cell. Inherited from SpreadsheetCellEventArgsBase. |
Remarks
Handle the CellBeginEdit
event to perform any actions when a user activates a cell editor (the in-place editor or formula bar).
Use the Cell
parameter to access a cell for which the cell editor is opened. The Value
and Formula
parameters return a value and formula currently contained in this cell.
To prevent a user from editing a cell value, handle this event and set its Cancel
parameter to true.
After a cell editor is activated, the SpreadsheetControl.CellEditorOpened event fires. The SpreadsheetControl.CellEndEdit or SpreadsheetControl.CellCancelEdit event occurs before a cell editor is closed, depending on whether the entered value is committed to a cell or rolled back.
Example
The example below shows how to validate user input for a sample spreadsheet:
The following events are used to perform this task:
SpreadsheetControl.CellBeginEdit
- Handle this event to specify that a user can edit cells only in the “Unit Price” and “Units in Stock” columns.
- SpreadsheetControl.CellEndEdit
- This event validates a value that a user enters into a cell. If the entered value is not a valid number, the Spreadsheet cancels the input and displays a warning.
- SpreadsheetControl.CellValueChanged
- If a cell value in the “Units in Stock” column is equal to zero, the cell’s background color changes to light pink.
<Grid>
<dxs:SpreadsheetControl x:Name="spreadsheetControl"
DocumentSource="pack://application:,,,/Spreadsheet WPF;component/Products.xlsx"
CommandBarStyle="Ribbon"
ShowFormulaBar="True"
ShowStatusBar="True"
CellBeginEdit="SpreadsheetControl1_CellBeginEdit"
CellEndEdit="SpreadsheetControl1_CellEndEdit"
CellValueChanged="SpreadsheetControl1_CellValueChanged" />
</Grid>
private CultureInfo CurrentCulture => spreadsheetControl.Options.Culture;
private void SpreadsheetControl1_CellBeginEdit(object sender, SpreadsheetCellCancelEventArgs e)
{
// Allow users to edit cells only in the 'Unit Price' and 'Units in Stock' columns.
if (e.Cell.ColumnIndex < 2 || e.Cell.ColumnIndex > 3 || e.Cell.RowIndex < 1 || e.Cell.RowIndex > 19)
{
e.Cancel = true;
MessageBox.Show("You can edit only the 'Unit Price' and 'Units in Stock' values.", "Warning", MessageBoxButtons.OK);
}
}
private void SpreadsheetControl1_CellEndEdit(object sender, SpreadsheetCellValidatingEventArgs e)
{
// Validate a value that a user enters into a cell.
string editorText = e.EditorText;
bool validValue = e.Cell.ColumnIndex == 2 ? ValidateUnitPrice(editorText) : ValidateUnitsInStock(editorText);
if (!validValue)
{
e.Cancel = true;
MessageBox.Show("The value you entered is invalid.", "Warning", MessageBoxButtons.OK);
}
}
private bool ValidateUnitPrice(string text)
{
// Validate values in the 'Unit Price' column.
// Convert the obtained string to a Double value.
bool conversionResult = double.TryParse(text, NumberStyles.AllowDecimalPoint, CurrentCulture, out double result);
return conversionResult && result > 0;
}
private bool ValidateUnitsInStock(string text)
{
// Validate values in the 'Units in Stock' column.
// Convert the obtained string to an integer value.
return int.TryParse(text, NumberStyles.None, CurrentCulture, out int result);
}
private void SpreadsheetControl1_CellValueChanged(object sender, SpreadsheetCellEventArgs e)
{
if (e.Cell.ColumnIndex != 3)
return;
// Highlight zero values in the 'Units in Stock' column.
e.Cell.FillColor = (e.Value.NumericValue == 0) ? Color.LightPink : Color.White;
}