取消数据网格编辑不会停止编辑

本文关键字:编辑 取消 数据网 网格 数据 | 更新日期: 2023-09-27 18:07:08

我正在实现一个wpf datagrid cellendedit事件,它执行一个可能失败的操作。如果操作失败,我将事件设置为已取消。这是一个基本的例子:

private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEvent e)
{
    e.Cancel = true;
}

这取消了正在设置的值,但是datagridcell仍然处于编辑状态。我不知道如何实际导致单元格结束编辑时,我取消。有什么建议吗?

取消数据网格编辑不会停止编辑

你需要调用CancelEdit:

private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEvent e)
{
    e.Cancel = true;
    (sender as DataGrid).CancelEdit(DataGridEditingUnit.Cell);
}

另一个解决方案是如此接近-您需要调用CancelEdit而不设置e.Cancel以防止值被设置为新值:

private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEvent e)
{
    (sender as DataGrid).CancelEdit(DataGridEditingUnit.Cell);
}

另一种可能性是继续编辑文本框,并再次将焦点设置为文本框,以防用户在外部单击:

private void datagrid_CellEditEnding(object sender, DataGridCellEditEndingEvent e)
{
    e.Cancel = true;
    (sender as DataGrid).Dispatcher.BeginInvoke((Action)(() =>
    {
        (sender as DataGrid).SelectedIndex = e.Row.GetIndex();
        e.EditingElement.Focus();
    }));
}