2014-09-25 103 views
3

如何更改用戶雙擊單元格後出現在EditMode中的字符串/值(cell.FormattedValue)?VB.net DataGridView更改Cell.FormattedValue

I.e.值爲「5」,格式化值爲「5個」,這會導致驗證錯誤。所以我不想把用戶看到的字串從「5個」換回到「5」。 然後它應該像用戶simpy開始寫入「5」並按Enter鍵時一樣工作。

這是不可能的,FormattedValue的是隻讀:

Me.dgwNest1.Rows(e.RowIndex).Cells(e.ColumnIndex).FormattedValue = 5 

Cell.Value不可用的,因爲它僅改變編輯字符串的值部分。

問候,

Libor的

+0

我也有類似的問題,檢查此[鏈接](http://stackoverflow.com/questions/25761275/datagridview-show-date-or-time-vb-net) – 2014-09-25 09:18:37

+0

謝謝你的建議,我測試了** CellFormatting **事件,但是這個事件被解僱了當從數據庫填入數據或輸入到單元格時。它與value/string沒有任何關係,雙擊時出現在editingMode中。 – 2014-09-25 12:07:34

回答

0

只需撥打這提高了DataGridView.CellFormatting事件FormattedValueType屬性,然後更改單元格樣式中的事件代碼。

FormattedValue只是Value屬性的格式化表示。 FormattedValue表示由FormattedValueType屬性指定。

如果更改FormattedValueType屬性,它將更改呈現給用戶的方式而不更改該值。 =)

從MSDN這些話告訴你如何編輯FormattedValue的:

Value屬性是由細胞包含實際數據對象, 而FormattedValue的是這個 對象的格式化表示。 ValueType和FormattedValueType屬性分別對應於這些值的數據類型 。

獲取該屬性的值調用GetFormattedValue方法 到單元格的值轉換成由FormattedValueType屬性指示的類型 的等效顯示值。這會引發 DataGridView.CellFormatting事件,您可以處理該事件以自定義 的值轉換。

參閱MSDN上的講話爲DataGridViewCell.FormattedValue物業here.

當CellFormatting事件引發的,你可以做這樣的事情:

Private Sub dgvMyData_CellFormatting(sender As System.Object, e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles dgvMyData.CellFormatting 
    Dim MyStyle As New System.Windows.Forms.DataGridViewCellStyle 

    MyStyle.Format = "00 ct" 
    'or to remove the formatting: 
    MyStyle.Format = "00" 

    e.CellStyle = MyStyle 
End Sub 
+0

我要麼不明白,要麼不適合我。 FormattedValueType也是ReadOnly,因此在BeginEdit上關閉格式並在EndEdit上重新開啓也不起作用。 我想有沒有很多人使用測量單位格式化列:-(,因爲我在這個問題上找不到任何關於谷歌的任何內容 – 2014-09-26 05:45:08

+0

我擴展了我的答案。您必須獲取處理CellFormatting事件的值。我希望它有幫助! =) – Hawkeye 2014-09-26 16:24:26