我有一个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();
}
我确信这不是应该如何做到的,但它适用于现有行。但是,它不适用于"新行" - 我仍然需要点击其他任何地方来应用创建新条目的更改。我想要在"新行"的任何单元格中创建新行。得到了编辑。
答案 0 :(得分:0)
单元格中的编辑器仍处于打开状态,您必须关闭它。
private void lookup_Closed(object sender, EventArgs e)
{
gvMyGrid.CloseEditor();
gvMyGrid.UpdateCurrentRow();
}