选择单元格编辑器LookUpEdit时,触发网格行验证

时间:2016-05-20 07:43:14

标签: c# validation gridview devexpress gridcontrol

我有一个DevExpress.XtraGrid.GridControl,其中有一列使用DevExpress.XtraEditors.Repository.RepositoryItemLookUpEdit作为单元格编辑器。

当我从LookUpEdit中选择一个项目时,这不会导致任何验证,但在我点击任何地方使网格失去焦点之前什么都不做。

我希望的行为是改变LookUpEdit的选择会立即触发Grid的行验证事件。

如何实现这一目标?

official DevExpress Documentation告诉我调用GridView的UpdateCurrentRow方法:

  

可能存在需要实现行验证的情况。 [...]为此,请处理ColumnView.ValidateRow事件。请注意,您还可以通过调用ColumnView.UpdateCurrentRow方法手动启动行验证。

我在GridView的ValidatingEditor事件处理程序中执行了此操作:

private void gridView1_ValidatingEditor(object sender,BaseContainerValidateEditorEventArgs e)
{
    (sender as GridView).UpdateCurrentRow();
}

但是,现在我无法再将新行添加到网格中作为最终用户。

什么是正确的方法?

更新

我现在正在收听GridView的CellValueChanging事件,并按照以下方式处理:

private void gridView_CellValueChanging(object sender, CellValueChangedEventArgs e)
{
    GridView gv = (sender as GridView);
    gv.CellValueChanging -= gridView_CellValueChanging;  // detach this event handler
    gv.ActiveEditor.EditValue = e.Value;  
    gv.CellValueChanging += gridView_CellValueChanging;  // re-attach handler
    gv.CloseEditor();
}

我确信这不是应该如何做到的,但它适用于现有行。但是,它不适用于"新行" - 我仍然需要点击其他任何地方来应用创建新条目的更改。我想要在"新行"的任何单元格中创建新行。得到了编辑。

1 个答案:

答案 0 :(得分:0)

单元格中的编辑器仍处于打开状态,您必须关闭它。

private void lookup_Closed(object sender, EventArgs e)
{
    gvMyGrid.CloseEditor();
    gvMyGrid.UpdateCurrentRow();
}