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

Far*_*ver 30 format wpf datetime datagrid

我们在运行时将未知结果集绑定到WPF DataGrid.我们的一些列将包含DateTime值,我们需要正确格式化这些日期时间字段.在设计时不知道哪些列将是DateTime字段,我们如何在运行时格式化列?

我们使用DataTable的DefaultView绑定到WPF DataGrid.

Jun*_*r M 48

关于什么

<DataGridTextColumn Header="Fecha Entrada" 
                    Width="110"  
                    Binding="{Binding EnterDate, StringFormat={}\{0:dd/MM/yyyy hh:mm\}}"
                    IsReadOnly="True" />
Run Code Online (Sandbox Code Playgroud)

我认为这比编写更大的代码要好

  • 我不明白为什么它是最喜欢的答案,案例是列是动态的,你所做的是硬编码.我错过了什么吗?! (7认同)
  • 这有效,但只有在删除\'s:'Binding ="{Binding date,StringFormat = {} {0:dd/MM/yyyy}}"` (6认同)
  • 这是否意味着您需要在设计时知道列?......与要求相反. (3认同)

Far*_*ver 32

我想出了如何在代码中执行此操作...希望有一种方法可以在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}";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 或者,如果您需要其他日期格式:dataGridTextColumn.Binding.StringFormat ="{0:dd.MM.yyyy}"; (4认同)

小智 19

嘿,您可以在WPF表单的构造函数中设置区域设置文化信息

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

或者,您可以在窗口标题标记中包含xml标记xml:lang ="en-GB"

  • `xml:lang`解决方案真棒. (3认同)

MAX*_*AXE 8

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


Bry*_*son 7

我会使用DataTemplate,其DataType为Date或DateTime(取决于它将通过哪个).使用绑定中的StringFormat将TextBlock放在DataTemplate中.

像这样的东西应该工作(未经测试)

<DataTemplate DataType="{x:Type DateTime}">
    <TextBlock Text="{Binding StringFormat={0:d}}"  />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

或者,如果您希望它仅应用于网格中

<wpfToolkit:DataGrid>
    <wpfToolkit:DataGrid.Resources>
        <DataTemplate DataType="{x:Type DateTime}">
            <TextBlock Text="{Binding StringFormat={0:d}}"  />
        </DataTemplate>
    </wpfToolkit:DataGrid.Resources>
    ...
</wpfToolkit:DataGrid>
Run Code Online (Sandbox Code Playgroud)