Как заставить грид распространять значение в источник данных сразу при изменении? - PullRequest
3 голосов
/ 22 марта 2012

У меня есть DevExpress 'XtraGrid, который связан с коллекцией объектов.Я хочу, чтобы изменения сразу попадали в основной источник данных.Но стандартное поведение DevExpress заключается в добавлении новых значений в источник данных только тогда, когда пользователь покинул ячейку.Таким образом, по умолчанию, когда пользователь вводит «Hello world» в ячейку, источник данных получает целое предложение за один раз.Но я хочу, чтобы он получал «H», «He», «Hel» и т. Д.

Я пытался вызвать PostEditor () в обработчике событий CellValueChanging, но это не помогло.Есть другие идеи?

Ответы [ 3 ]

9 голосов
/ 23 марта 2012

Редакторы 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();
}
2 голосов
/ 22 марта 2012

Я думаю, что CellValueChanging - это событие, которое нужно перехватить, но вместо PostEditor() try UpdateCurrentRow().

0 голосов
/ 23 марта 2012

Этот код в представлении CellValueChanging обработчика событий решил проблему:

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