【问题标题】:WPF DataGrid: numeric columns with fixed decimals positionsWPF DataGrid:具有固定小数位置的数字列
【发布时间】:2021-04-15 12:40:01
【问题描述】:

我在为 DataGrid(WPF,而不是 Forms DataGridView)中显示的某些数据获取正确的可视化效果时遇到问题。

我正在加载包含一些数字列的数据表。有些值有小数部分,有些没有,比如 2 、 2.5 、 10 等等。 我所看到的是 DataGrid 仅在必要时才会自动显示小数位,因此“5”的显示与“5”一样。出于可读性目的,我想将所有数字格式化为小数点后一位。我尝试使用Format(myNumber, "0.0"),但这会返回一个字符串:那么问题就是排序,它没有按预期执行(这样它的排序就像字符串,而不是数字)。

有什么想法吗?有人已经面临这个问题了吗?

【问题讨论】:

  • 您好,您找到解决方案了吗?

标签: wpf vb.net format numeric


【解决方案1】:

试试这个:

XAML:

<DataGridTextColumn Binding="{Binding myNumber, StringFormat=N0}" Header="price"/>

StringFormat=N05.00 转换为 5,如果您想显示一个位置,请使用 N1 显示 5.0 .

代码隐藏:

myNumber.ToString("N0");

【讨论】:

  • 感谢您的回答。我会试试看,但由于我需要一个代码端解决方案,请你解释一下如何做到这一点?我对 WPF 很陌生。
  • @FrankIsNotNothing 我更新了我的答案,你可以看看你需要什么。
  • 谢谢 Nebez,但我认为这样它会返回一个字符串,而不是双精度。然后我遇到了 DataGrid 排序问题...
  • @FrankIsNotNothing 请提供您的 XAML 和相关代码。还你怎么说呢?你测试过代码吗?
【解决方案2】:

我终于设法解决了这个问题。

问题是我必须在代码中生成列。我的 DataGrid 设置为 AutoGenerateColumns=True。

然后我添加了这段代码:

Private Sub DataGrid_OnAutoGeneratingColumn(sender As Object, e As DataGridAutoGeneratingColumnEventArgs) Handles DataGrid.AutoGeneratingColumn
    If e.PropertyType = GetType(Date) Then
        TryCast(e.Column, DataGridTextColumn).Binding.StringFormat = "yyyy/MM/dd HH:mm:ss"
    End If
End Sub

这样,我可以很容易地根据用户的喜好调整日期格式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-20
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2023-03-20
    • 2019-07-23
    相关资源
    最近更新 更多