我们在运行时将未知结果集绑定到WPF DataGrid。我们的一些列将包含DateTime值,我们需要正确格式化这些日期时间字段。在设计时不知道哪些列是DateTime字段,我们如何在运行时格式化列?
我们使用DataTable的DefaultView绑定到WPF DataGrid。
答案 0 :(得分:47)
怎么样
<wpfToolkit:DataGridTextColumn Header="Fecha Entrada" Width="110"
Binding="{Binding EnterDate,StringFormat={}\{0:dd/MM/yyyy hh:mm\}}" IsReadOnly="True" />
我认为这比编写更大的代码片段更好
答案 1 :(得分:31)
我想出了如何在代码中执行此操作...希望有一种方法可以在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}";
}
}
}
答案 2 :(得分:18)
嘿,您可以在WPF表单的构造函数中将区域设置文化信息设置为
this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag);
或您可以在窗口标题标记中包含xml标记 xml:lang =“en-GB”
答案 3 :(得分:8)
<DataGridTextColumn Header="Last update"
Width="110"
IsReadOnly="True"
Binding="{Binding Path=Contact.TimeUpdate, StringFormat={}\{0:dd/MM/yyyy hh:mm\}, Mode=OneWay}" />
答案 4 :(得分:7)
我会使用DataTemplate,其DataType为Date或DateTime(取决于它将通过哪个)。使用绑定中的StringFormat将TextBlock放在DataTemplate中。
这样的事情应该有效(未经测试)
<DataTemplate DataType="{x:Type DateTime}">
<TextBlock Text="{Binding StringFormat={0:d}}" />
</DataTemplate>
或者,如果您希望它仅应用于网格
<wpfToolkit:DataGrid>
<wpfToolkit:DataGrid.Resources>
<DataTemplate DataType="{x:Type DateTime}">
<TextBlock Text="{Binding StringFormat={0:d}}" />
</DataTemplate>
</wpfToolkit:DataGrid.Resources>
...
</wpfToolkit:DataGrid>
答案 5 :(得分:3)
dataGridTextColumn.Binding.StringFormat =“{0:dd / MM / yyyy}”;
美妙地工作
答案 6 :(得分:2)
<TextBlock Text="{Binding Date_start, StringFormat=\{0:dd-MM-yyyy\}, Mode=OneWay}" />
答案 7 :(得分:0)
FarrEver的回答,5月11日是好的,但是我不能发挥作用。我仍然得到美国mm / dd / yyy而不是我的德国dd / mm / yyyy。所以我建议找到计算机的区域设置并在StringFormat中使用它
Private Sub DGrid_AutoGeneratingColumn(ByVal sender As System.Object, ByVal e As Microsoft.Windows.Controls.DataGridAutoGeneratingColumnEventArgs)
If e.PropertyType Is GetType(DateTime) Then
Dim dataGridTextColumn As DataGridTextColumn = TryCast(e.Column, DataGridTextColumn)
If dataGridTextColumn IsNot Nothing Then
Dim ShortDatePattern As String = System.Globalization.DateTimeFormatInfo.CurrentInfo.ShortDatePattern
dataGridTextColumn.Binding.StringFormat = "{0:" + ShortDatePattern + "}" '"{0:dd/MM/yyyy}"
End If
End If
End Sub
另见:my blog