Подтвердить что ты не робот

Нужно форматировать даты в динамически построенных WPF DataGrid

Мы привязываем неизвестный набор результатов к WPF DataGrid во время выполнения. Некоторые из наших столбцов будут содержать значения DateTime, и нам необходимо правильно форматировать эти поля времени. Не зная, какие столбцы будут полями DateTime во время разработки, как мы можем форматировать столбцы во время выполнения?

Мы используем DataTable DefaultView для привязки к WPF DataGrid.

4b9b3361

Ответ 1

как насчет

<wpfToolkit:DataGridTextColumn Header="Fecha Entrada" Width="110"  
                                   Binding="{Binding EnterDate,StringFormat={}\{0:dd/MM/yyyy hh:mm\}}" IsReadOnly="True" />

Я думаю, что это лучше, чем писать большие фрагменты кода

Ответ 2

Я понял, как это сделать в коде... надеюсь, есть способ имитировать это в XAML. (Пожалуйста, напишите, если вы найдете рабочий образец XAML.)

Чтобы выполнить это в коде, добавьте обработчик событий для события Grid AutoGeneratingColumn, например:

private void ResultsDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(DateTime))
    {
        DataGridTextColumn dataGridTextColumn = e.Column as DataGridTextColumn;
        if (dataGridTextColumn != null)
        {
            dataGridTextColumn.Binding.StringFormat = "{0:d}";
        }
    }
}

Ответ 3

Эй, вы можете установить информацию о культуре локали в конструкторе формы WPF как

this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);

Или вы можете включить разметку xml xml: lang = "en-GB" в разметке заголовка окна

Ответ 4

<DataGridTextColumn Header="Last update"
    Width="110"
    IsReadOnly="True"
    Binding="{Binding Path=Contact.TimeUpdate, StringFormat={}\{0:dd/MM/yyyy hh:mm\}, Mode=OneWay}" />

Ответ 5

Я бы использовал DataTemplate с DataType Date или DateTime (в зависимости от того, как он будет проходить через). Поместите TextBlock в DataTemplate с помощью StringFormat в привязке.

Что-то вроде этого должно работать (непроверено)

<DataTemplate DataType="{x:Type DateTime}">
    <TextBlock Text="{Binding StringFormat={0:d}}"  />
</DataTemplate>

Или, если вы хотите, чтобы он применялся только в сетке

<wpfToolkit:DataGrid>
    <wpfToolkit:DataGrid.Resources>
        <DataTemplate DataType="{x:Type DateTime}">
            <TextBlock Text="{Binding StringFormat={0:d}}"  />
        </DataTemplate>
    </wpfToolkit:DataGrid.Resources>
    ...
</wpfToolkit:DataGrid>

Ответ 6

dataGridTextColumn.Binding.StringFormat = "{0: dd/MM/yyyy}";

работал красиво

Ответ 7

Я запускаю этот путь. его работа завершена.

<TextBlock  Text="{Binding Date_start,  StringFormat=\{0:dd-MM-yyyy\}, Mode=OneWay}" />

Ответ 8

Ответ FarrEver, 11 мая, хорош, но мне это не действует. Я все еще получаю американский миллион/дд/гггг вместо моего немецкого dd/mm/yyyy. Поэтому я предлагаю найти региональные настройки компьютера и использовать его в StringFormat

    Private Sub DGrid_AutoGeneratingColumn(ByVal sender As System.Object, ByVal e As Microsoft.Windows.Controls.DataGridAutoGeneratingColumnEventArgs)
    If e.PropertyType Is GetType(DateTime) Then
        Dim dataGridTextColumn As DataGridTextColumn = TryCast(e.Column, DataGridTextColumn)
        If dataGridTextColumn IsNot Nothing Then
            Dim ShortDatePattern As String = System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortDatePattern
            dataGridTextColumn.Binding.StringFormat = "{0:" + ShortDatePattern + "}" '"{0:dd/MM/yyyy}"
        End If
    End If
End Sub

см. также: мой блог