#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. Большое спасибо. Я выполнил это, используя событие автогенераторной колонки