存储库组合BoxEdit EditValueChanged在键入时多次触发。

时间:2014-08-25 16:22:29

标签: c# devexpress devexpress-windows-ui

我在Devexpress CustomGridView中有这个Repository Item 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一次。 这些内容http://www.devexpress.com/Support/Center/Question/Details/Q288616 Devexpress支持已经解决了这个问题,但似乎并没有帮助。 不知道为什么activeedior正在关闭并重置光标。 我不想在EditValueChanged中设置插入位置。

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

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

有没有办法弄清楚用户是否已经完成或仍在编辑combox框然后触发editvaluechanged而不必担心组合框编辑之外的点击

3 个答案:

答案 0 :(得分:0)

我能够通过不触发EditvalueChanged并使用Validating事件来解决此问题。 当编辑器即将失去焦点时,此事件将触发。它与CellvalueChanged不同,如果用户点击表单而不是用户控件,则更改将丢失。

答案 1 :(得分:0)

gridView1.PostEditor(); 将在填充值后显示编辑器。同样,我们可以将验证事件更改为触发“输入密钥”以解析为快速修复。

答案 2 :(得分:0)

更好的方法:

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