2012-03-22 44 views
3

我有一個綁定到對象集合的DevExpress'XtraGrid。我希望在更改時立即進入底層數據源。但默認的DevExpress行爲僅在用戶離開單元格時纔將新值添加到數據源中。因此,默認情況下,當用戶在單元格中輸入「Hello world」時,數據源將一次接收整個句子。但我希望它能得到「H」,「他」,「Hel」等。如何強制網格在變更時立即將值傳遞給數據源?

我試圖在CellValueChanging事件處理程序中調用PostEditor(),但它沒有幫助。任何其他想法?

回答

0

此代碼視圖的CellValueChanging事件處理程序解決的問題:

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

我應該說,這是錯誤的解決方案,可以引入多個問題(例如,你已經終止了編輯器的驗證,並且也丟失了編輯器的光標位置) – DmitryG 2012-03-23 20:35:58

+0

如果單元格編輯器是文本編輯器,它不起作用,因爲SetFocussedRowCellValue將始終重置光標位置。 – Adiono 2014-11-30 02:54:17

2

我覺得CellValueChanging是事件捕獲但不是PostEditor()嘗試UpdateCurrentRow().

+0

謝謝!雖然沒有幫助..只有當我離開單元格時,相同的行爲 - 值才進入數據源。 – Dmitry 2012-03-22 16:35:01

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(); 
} 
+0

編輯器關閉時調用HiddenEditor事件,因此gridView.ActiveEditor爲null。是否有可以處理的另一個事件來刪除EditValueChanged處理程序? – Yuyo 2014-07-24 15:50:17

+0

@Yuyo無論如何,您可以將GridView.ActiveEditor值存儲到ShownEditor事件中的字段變量中,然後使用該值來取消訂閱(我相應地更新了我的答案)。 – DmitryG 2014-07-28 04:57:27

相關問題