Измените формат даты существующего столбца DataGridColumn в WPF

#sql #.net #wpf #visual-studio #datagrid

Вопрос:

У меня есть DataGrid в приложении WPF, и его свойство ItemsSource имеет значение DataTable. Но проблема в том, что в столбце Дата отображается дата в формате «мм/дд/гггг» И требуется в форме даты «дд/мм/гггг». Итак, каков будет наиболее оптимальный способ его достижения? Поскольку я запрашиваю таблицу из базы данных MS Access, я всегда получаю дату в английском формате

Комментарии:

1. Пожалуйста, уточните, какой тип даты хранится в таблице данных: строка, дата-время или DateTimeOffset?

2. Его дата и время @EldHasp

Ответ №1:

Я вижу два простых способа установить желаемое представление даты: установка требуемой культуры (языка) в сетке данных и управляемое автоматическое создание столбцов.
Во втором варианте вы настраиваете нужные столбцы в событии AutoGeneratingColumn.

Пример:

 using System;
using System.Data;

namespace DateColumnFormat
{
    public class DatesSource
    {
        public DataTable Table { get; } = new DataTable();

        private static readonly Random random = new Random();
        private static readonly DateTime begin = new DateTime(1900, 1, 1);
        private static readonly DateTime end = DateTime.Today;
        private static readonly double interval = (end - begin).TotalSeconds;

        public DatesSource()
        {
            // Creating one column and ten rows with random dates

            Table.Columns.Add(new DataColumn("Dates", typeof(DateTime)));

            for (int i = 0; i < 10; i  )
            {
                DataRow newRow = Table.NewRow();

                newRow[0] = begin.AddSeconds(random.NextDouble() * interval);

                Table.Rows.Add(newRow);
            }

        }
    }
}
 

Вид:

 <Window x:Class="DateColumnFormat.FormatTestWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DateColumnFormat"
        mc:Ignorable="d"
        Title="FormatTestWindow" Height="300" Width="500">
    <FrameworkElement.DataContext>
        <local:DatesSource/>
    </FrameworkElement.DataContext>
    <UniformGrid Rows="1">
        <DataGrid ItemsSource="{Binding Table}"/>
        <DataGrid ItemsSource="{Binding Table}" Language="ru"/>
        <DataGrid ItemsSource="{Binding Table}" AutoGeneratingColumn="OnAutoGeneratingColumn"/>
    </UniformGrid>
    <x:Code>
        <![CDATA[
            private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
            {
                if (e.PropertyName == "Dates")
                {
                    var column = (DataGridTextColumn)e.Column;
                    var binding = (Binding)column.Binding;
                    binding.StringFormat = "dd-MMMM-yyyy";
                    binding.ConverterCulture = System.Globalization.CultureInfo.GetCultureInfo("de-De");
                }
            }
        ]]>
    </x:Code>
</Window>
 

Комментарии:

1. Большое спасибо. Я выполнил это, используя событие автогенераторной колонки