.net Datagrid单元格中的文本格式
我正在尝试格式化datagrid数据单元格中的数字,以便使“1000000.52”看起来像:“1000 000.52” 我试图寻找支持这些功能的属性,但只能在DataGridCell类中找到ContentStringFormat属性。不幸的是,我尝试的方法不起作用:.net Datagrid单元格中的文本格式,.net,wpf,vb.net,xaml,.net,Wpf,Vb.net,Xaml,我正在尝试格式化datagrid数据单元格中的数字,以便使“1000000.52”看起来像:“1000 000.52” 我试图寻找支持这些功能的属性,但只能在DataGridCell类中找到ContentStringFormat属性。不幸的是,我尝试的方法不起作用: <DataGrid CanUserAddRows="False" Name="EGrid" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" ItemsSource="{Bin
<DataGrid CanUserAddRows="False" Name="EGrid" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" ItemsSource="{Binding Path=Data, Mode=TwoWay, ElementName=ExportableGrid}">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="ContentStringFormat" Value="## ### ###.00"/>
</Style>
</DataGrid.CellStyle>
</DataGrid>
我怎样才能做到这一点?非常感谢您的帮助,提前感谢。我将创建一个自定义值转换器:
Imports System.Globalization
Public Class DecimalFormatConverter
Implements IValueConverter
Public Function IValueConverter_Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
Dim decimalVal As Decimal = Nothing
If value IsNot Nothing AndAlso parameter IsNot Nothing AndAlso Decimal.TryParse(value.ToString(), decimalVal) Then
Return decimalVal.ToString(parameter.ToString())
End If
Return value
End Function
Public Function IValueConverter_ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException
End Function
End Class
要在xaml中使用它,请执行以下操作:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp6VB"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<Grid>
<Grid.Resources>
<local:DecimalFormatConverter x:Key="DecimalFormatConverter" />
</Grid.Resources>
<DataGrid CanUserAddRows="False" x:Name="EGrid" Grid.Column="0" ItemsSource="{Binding Nums}" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Number">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource DecimalFormatConverter}, ConverterParameter='## ### ###.00'}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
输出:
我要创建一个自定义值转换器:
Imports System.Globalization
Public Class DecimalFormatConverter
Implements IValueConverter
Public Function IValueConverter_Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
Dim decimalVal As Decimal = Nothing
If value IsNot Nothing AndAlso parameter IsNot Nothing AndAlso Decimal.TryParse(value.ToString(), decimalVal) Then
Return decimalVal.ToString(parameter.ToString())
End If
Return value
End Function
Public Function IValueConverter_ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
Throw New NotImplementedException
End Function
End Class
要在xaml中使用它,请执行以下操作:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp6VB"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
<Grid>
<Grid.Resources>
<local:DecimalFormatConverter x:Key="DecimalFormatConverter" />
</Grid.Resources>
<DataGrid CanUserAddRows="False" x:Name="EGrid" Grid.Column="0" ItemsSource="{Binding Nums}" >
<DataGrid.Columns>
<DataGridTemplateColumn Header="Number">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource DecimalFormatConverter}, ConverterParameter='## ### ###.00'}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
输出:
您需要将其转换为字符串,拆分它,并在需要的地方添加空格 我把你的问题硬编码了。 如果您想让代码段使用不同的数字,我建议您使用相同的逻辑,在数字的长度上创建一个
Select/Case
以下是解决问题的代码:
Dim number As Double = 1000000.52
Dim str() As String = Convert.ToString(number).Split(",")
str(0) = "" & _
str(0).Substring(0, 1) & _
" " & str(0).Substring(1, 3) & _
" " & str(0).Substring(4, 3) & _
"." & str(1)
您需要将其转换为字符串,拆分它,并在需要的地方添加空格 我把你的问题硬编码了。 如果您想让代码段使用不同的数字,我建议您使用相同的逻辑,在数字的长度上创建一个
Select/Case
以下是解决问题的代码:
Dim number As Double = 1000000.52
Dim str() As String = Convert.ToString(number).Split(",")
str(0) = "" & _
str(0).Substring(0, 1) & _
" " & str(0).Substring(1, 3) & _
" " & str(0).Substring(4, 3) & _
"." & str(1)
我认为解决这个问题的正确方法是将你的double转换成字符串,然后用其他方法来实现你所需要的。我认为解决这个问题的正确方法是将你的double转换成字符串,然后用其他方法来实现你所需要的。如果我的答案告诉你,我会很高兴的。你运行了这个吗密码?它抛出了一个索引超出范围的错误。我在数字中没有看到逗号,因此split函数返回一个单元素数组。str(1)将导致错误。不,很抱歉,1000000.52被保存到双变量中,作为
1000000,52
谢谢您的输入,但是检测数字数据,在一个可以有数千行和几十列的数据网格中,转换它然后格式化它似乎是一项非常繁重的工作。如果我的回答符合你的要求,我会很高兴的。你运行了这段代码吗?它抛出了一个索引超出范围的错误。我在数字中没有看到逗号,因此split函数返回一个单元素数组。str(1)将导致错误。不,我很抱歉,1000000.52被保存到双变量中,作为1000000,52
谢谢您的输入,但是在数据网格中,检测数字数据,转换数据,然后格式化数据似乎是一项非常繁重的工作,其中可能有数千行和几十列。在那里,我制作了一个vb.net版本。首先,谢谢你的意见。这似乎是一条路要走。但是,在本例中,我无法手动定义每一列,因为它们可能会更改(数据是从一个请求加载的,该请求在运行时随事件而更改)。我试图用另一个可以从DataGrid本身访问的属性来解决这个问题,但在找到它时遇到了困难。我通过编程进行了更正,因为我意识到需要列的实例来格式化其单元格模板。连接到AutoGeneratingColumn事件的事件处理程序使每个动态生成的列都可以这样做。你带我上路,我会接受你的回答。谢谢很高兴我能帮忙!我制作了一个vb.net版本。首先,感谢您的输入。这似乎是一条路要走。但是,在本例中,我无法手动定义每一列,因为它们可能会更改(数据是从一个请求加载的,该请求在运行时随事件而更改)。我试图用另一个可以从DataGrid本身访问的属性来解决这个问题,但在找到它时遇到了困难。我通过编程进行了更正,因为我意识到需要列的实例来格式化其单元格模板。连接到AutoGeneratingColumn事件的事件处理程序使每个动态生成的列都可以这样做。你带我上路,我会接受你的回答。谢谢很高兴我能帮忙!