0

我在 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 Support 对此问题进行了一些修复,但似乎没有帮助。不确定为什么 activeeditor 正在关闭并重置光标。我不想在 EditValueChanged 中设置插入符号位置。

我也试过 CellvalueChanged 但这需要在用户控件中单击。与 repository.validating 相同

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

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

4

3 回答 3

0

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

于 2014-08-25T17:57:52.530 回答
0

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

于 2014-09-19T09:50:44.670 回答
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 设计器屏幕中创建它,并将其分配给那里的列。您仍然可以使用上述方法在运行时更新其项目列表。

于 2015-01-22T17:03:17.520 回答