Форматирование даты в WPat datagrid
Я уже искал stackoverflow для решения и нашел это:
Нужно форматировать даты в динамически создаваемом WPF DataGrid
Моя проблема заключается в том, что я загружаю некоторые данные из своей базы данных SQL-Server и хочу показать их в своем WPF-приложении в DataGrid. Это работает очень хорошо.
Единственное, что я хочу изменить, это то, что столбец даты находится в формате "DD/MM/YYYY HH: MM: SS", и я хочу иметь "DD.MM.YYYY".
Хорошо, тогда я посмотрел ссылку ниже и попробовал это в своей программе:
<Grid Width="648" Height="263">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="172*" />
<ColumnDefinition Width="90*" />
<ColumnDefinition Width="386*" />
</Grid.ColumnDefinitions>
<DataGrid Name="dgBuchung" Height="213" HorizontalAlignment="Left" Margin="30,16,0,0" VerticalAlignment="Top" Width="595" AutoGenerateColumns="True" ItemsSource="{Binding}" Grid.ColumnSpan="3" Foreground="Black" BorderBrush="#FF688CAF" Opacity="1" Background="White" BorderThickness="1" >
<!-- <ab:DataGridTextColumn Header="Fecha Entrada" Width="110"
Binding="{Binding date, StringFormat={}{0:dd/MM/yyyy}}" IsReadOnly="True" />
-->
</DataGrid>
</Grid>
Прокомментированная часть - это мой способ решения, но он генерирует исключение XMLParseException.
Прежде всего, возможен ли такой способ решения при использовании AutoGenerateColumns?
Если нет, как еще я могу попытаться справиться с этим?
Если да, в чем проблема с кодом выше?
EDIT:
Мой вопрос не решен, потому что я решил не перестраивать мое приложение, разве нет решения с AutoGenerateColumns = true?
Ответы
Ответ 1
Не забывайте использовать DataGrid.Columns, все столбцы должны быть внутри этой коллекции.
В моем проекте я отформатировал дату несколько иначе:
<tk:DataGrid>
<tk:DataGrid.Columns>
<tk:DataGridTextColumn Binding="{Binding StartDate, StringFormat=\{0:dd.MM.yy HH:mm:ss\}}" />
</tk:DataGrid.Columns>
</tk:DataGrid>
С помощью AutoGenerateColumns вы не сможете форматировать contol, поскольку DataGird будет добавлять свои собственные столбцы.
Ответ 2
Очень поздно на вечеринку здесь, но в случае, если кто-то еще наткнется на эту страницу...
Вы можете сделать это, установив обработчик AutoGeneratingColumn в XAML:
<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn" ..etc.. />
И затем за кодом кода сделайте что-то вроде этого:
private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyType == typeof(System.DateTime))
(e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy";
}
Ответ 3
Если ваше связанное свойство - DateTime, тогда вам нужно всего
Binding={Property, StringFormat=d}
Ответ 4
Я знаю, что принятый ответ довольно старый, но есть способ управлять форматированием с помощью AutoGeneratColumns:
Сначала создайте функцию, которая будет запускаться при генерации столбца:
<DataGrid x:Name="dataGrid" AutoGeneratedColumns="dataGrid_AutoGeneratedColumns" Margin="116,62,10,10"/>
Затем проверьте, является ли тип сгенерированного столбца DateTime и просто измените его формат String на "d", чтобы удалить временную часть:
private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if(YourColumn == typeof(DateTime))
{
e.Column.ClipboardContentBinding.StringFormat = "d";
}
}
Ответ 5
сначала выберите datagrid, а затем перейдите к свойствам find Datagrid_AutoGeneratingColumn и двойному щелчку
И затем используйте этот код
Datagrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
if (e.PropertyName == "Your column name")
(e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MMMMMMMMM/yyyy";
if (e.PropertyName == "Your column name")
(e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MMMMMMMMM/yyyy";
}
Я пытаюсь, он работает на WPF