Repository Combo BoxEdit EditValueChanged在输入时多次触发

本文关键字:输入 Combo BoxEdit EditValueChanged Repository | 更新日期: 2023-09-27 18:19:18

我在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();
}

editvaluechange在键入时触发多次。是否有一种方法可以在用户完全完成编辑单元格后触发此editvaluechange。类似于http://www.devexpress.com/Support/Center/Question/Details/Q288616Devexpress Support对这个问题有一些修复,但似乎没有帮助。不确定活动编辑器关闭并重置光标的原因。我不想在editvaluechange中设置插入符号的位置。

我也尝试了cellvaluechange,但这需要在用户控件中单击。与repository. validation

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

是否有一种方法可以确定用户是否完成或仍在编辑组合框,然后触发editvaluechange,而不必担心组合框外的点击

Repository Combo BoxEdit EditValueChanged在输入时多次触发

更好的方法:

处理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屏幕中创建它,并将其分配给那里的列。您仍然可以在运行时使用上面的命令更新它的项列表。

我能够通过不触发editvaluechange和使用验证事件来解决这个问题。当编辑器即将失去焦点时触发此事件。它不像cellvaluechange,如果用户单击表单而不是用户控件,更改将丢失。

gridView1.PostEditor();将显示填充值后的编辑器。类似地,我们可以将验证事件更改为在'Enter Key'时触发以作为快速解决方案。