2014-09-25 74 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