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,而不必担心组合框外的点击
更好的方法:
处理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'时触发以作为快速解决方案。