如何在更改时强制网格立即将值传播到数据源?

时间:2012-03-22 15:04:28

标签: c# winforms binding devexpress xtragrid

我有一个DevExpress'XtraGrid,它绑定到一组对象。我希望更改在更改时立即进入基础数据源。但默认的DevExpress行为是仅在用户离开单元格时才将新值放入数据源。因此,默认情况下,当用户在单元格中键入“Hello world”时,数据源将一次性接收整个句子。但我希望它能收到“H”,“他”,“Hel”等等。

我试图在CellValueChanging事件处理程序中调用PostEditor(),但它没有帮助。还有其他想法吗?

3 个答案:

答案 0 :(得分:9)

Grid的就地编辑器提供最终用户在编辑器中键入或以某种方式更改其值时发生的EditValueChanged事件。您可以处理此事件以将当前编辑的值发布到数据源 所以,我建议你使用以下方法:

    //...
    gridView.ShownEditor += gridView_ShownEditor;
    gridView.HiddenEditor += gridView_HiddenEditor;
}
DevExpress.XtraEditors.BaseEdit gridViewActiveEditor;
void gridView_ShownEditor(object sender, EventArgs e) {
    gridViewActiveEditor = gridView.ActiveEditor;
    gridViewActiveEditor.EditValueChanged += ActiveEditor_EditValueChanged;
}
void gridView_HiddenEditor(object sender, EventArgs e) {
    gridViewActiveEditor.EditValueChanged -= ActiveEditor_EditValueChanged;
}
void ActiveEditor_EditValueChanged(object sender, EventArgs e) {
    gridView.PostEditor();
}

答案 1 :(得分:2)

我认为CellValueChanging是要捕获的事件,而不是PostEditor()尝试UpdateCurrentRow().

答案 2 :(得分:0)

视图的 CellValueChanging 事件处理程序中的此代码解决了这个问题:

    private void OnCellValueChanging(object sender, CellValueChangedEventArgs e)
    {
        _gridView.SetFocusedRowCellValue(_gridView.FocusedColumn, e.Value);
    }