2012-07-05 65 views
3

我有一個windows格式的infragistics ultragrid控件。在外面有一個「添加新的」按鈕來將新行插入到網格中。如何在外部點擊時從Infragistics超網格單元中移除焦點?

我面臨的問題是,當我單擊網格外的按鈕時,在編輯網格內的單元格時,單元格不會失去焦點。因此,編輯後的新值不會更新爲其基礎數據源。

我需要這個單元格失去焦點並更新它的底層數據源,因爲'添加新'按鈕創建一個新行,該特定列具有基於前一行的編輯值計算的默認值。

那麼關於如何使超格子細胞沒有聚焦的任何想法?這種情況也可能適用於普通的GridView。

+1

我不確定我是否得到它,但是當您單擊網格外部時,單元終止輸入模式,並且這將更新基礎數據源。這是正常行爲,除非您將'UpdateMode'屬性設置爲'OnUpdate'。你能檢查嗎? – Steve 2012-07-05 13:15:53

+0

謝謝@Steve。 'UpdateMode'的值設置爲'OnCellChangeOrLostFocus'。單擊除「添加新」按鈕之外的其他控件時,單元格失去焦點。這是一個ToolStripButton。 – vibgy 2012-07-06 10:04:48

+0

然後是@alhalama答案好。 – Steve 2012-07-06 10:06:09

回答

8

如果您的按鈕位於工具欄上,那麼您所看到的行爲是預期的,因爲工具欄不需要關注。如果在執行邏輯之前就是這種情況,那麼可以使用網格的PerformAction方法並傳入UltraGridAction.CommitRow以強制正在編輯的行提交其更新。

例如:

this.ultraGrid1.PerformAction(UltraGridAction.CommitRow); 
+0

+1是的,這是一種可能性,我沒有想過 – Steve 2012-07-05 23:08:38

+0

謝謝@alhalama。您的解決方案完美運作 – vibgy 2012-07-06 10:12:48

1

我用myUltraGrid.ActiveRow.Cells[0].Activate();也可以工作。但@alhalama的解決方案更好一個我猜。

+1

如果ActiveRow爲null或者ActiveRow是GroupByRow,則此方法可能會導致NullReferenceException。它也會改變網格的活動單元格,而我建議的方法不會。如果它確實是一個菜單或工具欄,並不重點,我建議你可以再按F2鍵進入單元格的編輯模式。如果你使用這種方法,下面的檢查將確保你有一個數據行:if(this.ultraGrid1.ActiveRow!= null && this.ultraGrid1.ActiveRow.IsDataRow){this.ultraGrid1.ActiveRow.Cells [0] 。啓用();} – alhalama 2012-07-07 00:26:39

相關問題