C# 输入时,Repository Combo BoxEdit EditValueChanged多次激发。

C# 输入时,Repository Combo BoxEdit EditValueChanged多次激发。,c#,devexpress,devexpress-windows-ui,C#,Devexpress,Devexpress Windows Ui,我在Devexpress CustomGridView中有此存储库项comboboxEdit private void gridView1_CustomRowCellEditForEditing(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e) { if (e.Column == this.gcCol1) { var repositoryItem = new Repos

我在Devexpress CustomGridView中有此存储库项comboboxEdit

private void gridView1_CustomRowCellEditForEditing(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e)
{
 if (e.Column == this.gcCol1)
    {
        var repositoryItem = new RepositoryItemComboBox();
        foreach (var title in this.ViewModelList.Titles)
            {
                repositoryItem.Items.Add(title.TitleName);
            }
            repositoryItem.EditValueChanged += this.PostEditValueChanged;
            repositoryItem.Validating+=this.validating;
            e.RepositoryItem = repositoryItem;
    }
}
private void PostEditValueChanged(object sender, EventArgs e)
{
     this.gridView1.PostEditor();

}
EditValueChanged在键入时多次激发。是否有方法在用户完全编辑完单元格后触发此EditValueChanged。 类似这样的东西 Devexpress支持对此问题进行了一些修复,但似乎没有帮助。 不确定activeedior关闭并重置光标的原因。 我不想在EditValueChange中设置插入符号位置

我还尝试了CellvalueChanged,但这需要单击usercontrol。 与repository.validating相同

 repositoryItem.EditValueChanged += this.PostEditValueChanged;
 repositoryItem.Validating+=this.validating;

有没有一种方法可以确定用户是否已编辑组合框,或者仍在编辑组合框,然后启动editvaluechanged,而无需担心在组合框外单击edit

我可以通过不启动editvaluechanged并使用验证事件来解决此问题。 当编辑器即将失去焦点时触发此事件。它与CellvalueChanged不同,如果用户单击表单而不是usercontrol,则更改将丢失。

gridView1.PostEditor;将在填充值后显示编辑器。类似地,我们可以将验证事件更改为在“回车键”上触发,以快速解决问题。

更好的方法:

在编辑器上处理GridView的CellValueChanged事件,而不是EditValueChanged事件

在处理程序中,确定触发事件的列。比如说,

if (e.Column.Equals(this.gvColTitle))
{
    //Access the repository item:
    ComboBoxEdit editor = this.gridView1.ActiveEditor as ComboBoxEdit;  

    //Assign your values to the editor.
}

我不知道为什么要在运行时添加存储库项,但您可以在XtraGrid Designer屏幕中创建它,并将其分配给该列。您仍然可以在运行时使用上述命令更新其项目列表。

EditValueChanged实际上在每次编辑值更改时都会激发,这意味着每个新的或删除的字符都将触发事件。我在EditValueChanged事件中有一个Posteditor。PostEditor通过不关闭活动编辑器来保存对数据源的更改。但出于某种原因,它正在关闭活动编辑器,这意味着将光标重置为0。因此,当用户进行编辑或键入时,我所能做的就是不调用editvalueChanged。但在焦点丢失时使用验证