Форматирование текста в ячейке Datagrid - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь отформатировать числа в ячейках данных сетки данных, чтобы '1000000.52' выглядело как: '1 000 000.52' , например.

Я пытался найти свойства, которые позволяют такие вещи, и могу найти только свойство ContentStringFormat внутри класса DataGridCell . К сожалению, то, что я пробовал, не работает:

<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>

Как я мог этого достичь? Буду очень признателен за любую помощь, заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Вам нужно преобразовать его в строку, разбить его и добавить пробелы, где это необходимо.

Я жестко закодировал твою проблему. Если вы хотите, чтобы фрагмент работал с другим номером, я предлагаю вам использовать ту же логику и создать 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)
0 голосов
/ 10 сентября 2018

Я бы создал собственный конвертер значений:

    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>

Выход:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...