VB.NET中如何修改DataTable格式为N2并在DataGridView展示
解决方案
方法1:使用DataTable计算列(推荐)
DataTable本身只存储原始数据值,不会保留显示格式,所以直接修改列属性无法改变展示效果。可以通过添加计算列的方式,在数据源层面生成格式化后的字符串,绑定后就能直接显示符合要求的格式。
修改后的代码:
Private Sub ImprovedCode() Dim dt As New DataTable("tbl") ' 添加日期列 Dim dtColumn As New DataColumn With {.DataType = GetType(DateOnly), .ColumnName = "CreatedDate"} dt.Columns.Add(dtColumn) ' 添加原始价格列(用于存储数值,后续可隐藏) Dim dtColumn2 As New DataColumn With {.DataType = GetType(Double), .ColumnName = "OriginalPrice"} dt.Columns.Add(dtColumn2) ' 添加格式化后的计算列,直接生成"N2"格式的字符串 Dim formattedPriceCol As New DataColumn With { .DataType = GetType(String), .ColumnName = "Price", .Expression = "FORMAT(OriginalPrice, 'N2')" } dt.Columns.Add(formattedPriceCol) ' 插入数据行 Dim dr As DataRow = dt.NewRow() dr(dtColumn) = DateOnly.FromDateTime(Date.Now) dr(dtColumn2) = 120000 Dim dr1 As DataRow = dt.NewRow() dr1(dtColumn) = DateOnly.FromDateTime(Date.Now) dr1(dtColumn2) = 130000 dt.Rows.Add(dr) dt.Rows.Add(dr1) ' 绑定数据源 DataGridView1.DataSource = dt ' 可选:隐藏原始数值列,只显示格式化后的列 DataGridView1.Columns("OriginalPrice").Visible = False End Sub
方法2:用自定义实体类替代DataTable
如果可以放弃DataTable,改用自定义实体类,通过只读属性返回格式化后的字符串,绑定后也能直接得到期望的显示效果:
Public Class Product Public Property CreatedDate As DateOnly Public Property OriginalPrice As Double ' 只读属性返回格式化后的价格 Public ReadOnly Property Price As String Get Return OriginalPrice.ToString("N2") End Get End Property End Class Private Sub ImprovedCode() Dim productList As New List(Of Product) From { New Product With {.CreatedDate = DateOnly.FromDateTime(Date.Now), .OriginalPrice = 120000}, New Product With {.CreatedDate = DateOnly.FromDateTime(Date.Now), .OriginalPrice = 130000} } DataGridView1.DataSource = productList End Sub
核心逻辑说明
DataTable的作用是存储结构化数据,不负责处理显示格式。想要不依赖DataGridView的格式设置,必须从数据源层面生成格式化后的内容——要么用计算列转换原始数值,要么用实体类的属性直接返回格式化字符串,两种方法都能实现你的需求。
内容的提问来源于stack exchange,提问作者roy
相关产品推荐
相关产品推荐

