首页 > 解决方案 > devExpress winform GridLookUpEdit 在 ProcessNewValue 事件后未选择新添加的值

问题描述

嗨,我正在使用 devexpress winform 控件,特别是 GridLookUpEdit,我尝试在 GridLookUpEdit_ProcessNewValue 事件中异步保存新记录,但我无法自动选择创建的记录,我尝试在没有“等待”的情况下异步保存并且它有效很好,但是在添加到 GridLookUpEdit 数据源之前,我需要能够等待操作的结果。有谁知道为什么会发生这种情况,或者如何解决这个问题?

 DevExpress.XtraEditors.GridLookUpEdit gridLookUp = sender as DevExpress.XtraEditors.GridLookUpEdit;
        try
        {
            var pais = cboPais.EditValue?.ToString();
            if (string.IsNullOrWhiteSpace(pais))
            {
                e.Handled = true;
                return;
            }

            if ((string)e.DisplayValue != String.Empty && FrameUtil.MostrarMensage(
                        this, "Confirmar", "Desea crear un registro nuevo ?", "La provincia o estado  '" + e.DisplayValue.ToString() + "' aun no se a agregado al pais " +
                        pais + Environment.NewLine + "Presione si para continuar y agregarlo",
                        MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {

                ProvinciaDto provincia = new ProvinciaDto()
                {
                    CodigoPais = pais,
                    Descripcion = e.DisplayValue.ToString()
                };

                await _context.Provincias.GuardarAsync(provincia);

                ListaGenerica<ProvinciaDto> listaProvincias = bsProvincia.DataSource as ListaGenerica<ProvinciaDto>;
                listaProvincias.Add(provincia);

                e.DisplayValue = provincia.Descripcion;
                gridLookUp.Refresh();
            }
        }
        catch (Exception ex)
        {
            FrameUtil.MostrarMensageError(this, ex);
        }
        finally
        {
            e.Handled = true;
        }
    }

标签: devexpress

解决方案


我建议你参考这个 - RepositoryItemLookUpEditBase.ProcessNewValue Event

将一条记录添加到 GridLoopEdit 的数据源是一个简单的示例。您应该尝试删除e.DisplayValue = provincia.Descripcion; gridLookUp.Refresh();.

//ProcessNewValue event handler
void LookUpEdit1_ProcessNewValue(object sender, ProcessNewValueEventArgs e) {
    if ((string)e.DisplayValue != String.Empty && MessageBox.Show(
        this, "Add the '" + e.DisplayValue.ToString() + "' entry to the list?",
        "Confirm", MessageBoxButtons.YesNo) == DialogResult.Yes) {
            ContactList list = (sender as LookUpEdit).Properties.DataSource as ContactList;
            list.Add(new Contact(list.Count, e.DisplayValue.ToString()));
            e.Handled = true;
    }
}

推荐阅读