WPF数据网格中的日期格式

Har*_*ald 54 c# wpf datagrid date-formatting

我已经搜索了stackoverflow的解决方案并发现了这个:

需要在动态构建的WPF DataGrid中格式化日期

我的问题是,我从SQL-Server-Database中加载了一些数据,并希望在DataGrid中的WPF应用程序中显示它们.这非常有效.我唯一要改变的是日期列的格式为"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>
Run Code Online (Sandbox Code Playgroud)

out评论部分是我的解决方案,但它抛出XMLParseException.首先,使用AutoGenerateColumns时这种解决方案是否可行?如果不是,我怎么能尝试处理这个?如果是,上面的代码有什么问题?

编辑: 我的问题没有解决,因为我决定不重建我的应用程序,没有AutoGenerateColumns = true的解决方案?

ice*_*bat 104

不要忘记使用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>
Run Code Online (Sandbox Code Playgroud)

使用AutoGenerateColumns,您将无法控制格式,因为DataGird将添加自己的列.


Mar*_*man 82

这里的聚会很晚,但万一其他人偶然发现这个页面......

您可以通过在XAML中设置AutoGeneratingColumn处理程序来完成此操作:

<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn"  ..etc.. />
Run Code Online (Sandbox Code Playgroud)

然后在后面的代码中执行以下操作:

private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(System.DateTime))
        (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy";
}
Run Code Online (Sandbox Code Playgroud)

  • 伟大的!如果您需要 VB.NET 版本: Private Sub MyGrid_AutoGeneratingColumn(sender As Object, e As DataGridAutoGeneratingColumnEventArgs) 处理 MyGrid.AutoGeneratingColumn If e.PropertyType = GetType(System.DateTime) Then TryCast(e.Column, DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy" End If End Sub (3认同)
  • 我会使用 `DataGridBoundColumn` 而不是 `DataGridTextColumn` 来更通用。 (3认同)

小智 14

如果您的绑定属性是DateTime,那么您只需要

Binding={Property, StringFormat=d}
Run Code Online (Sandbox Code Playgroud)


小智 8

Binding="{Binding YourColumn ,StringFormat='yyyy-MM-dd'}"
Run Code Online (Sandbox Code Playgroud)

  • 请添加对代码的解释,这将大大提高答案的质量。 (5认同)