Nous lions un ensemble de résultats inconnu à un WPG DataGrid au moment de l'exécution. Certaines de nos colonnes contiendront des valeurs DateTime et nous devons formater correctement ces champs date-heure. Sans savoir quelles colonnes seront des champs DateTime au moment de la conception, comment pouvons-nous formater les colonnes lors de l'exécution?
Nous utilisons DefaultView d'un DataTable pour nous lier au WPF DataGrid.
qu'en est-il de
<wpfToolkit:DataGridTextColumn Header="Fecha Entrada" Width="110"
Binding="{Binding EnterDate,StringFormat={}\{0:dd/MM/yyyy hh:mm\}}" IsReadOnly="True" />
Je pense que c'est mieux que d'écrire de plus gros morceaux de code
J'ai compris comment le faire dans le code ... j'espère qu'il existe un moyen d'imiter cela en XAML. (Veuillez poster si vous trouvez un échantillon XAML fonctionnel.)
Pour ce faire dans le code, ajoutez un gestionnaire d'événements pour l'événement AutoGeneratingColumn de la grille, tel que:
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}";
}
}
}
Hé, vous pouvez définir les informations de culture locale dans le constructeur du formulaire WPF comme
this.Language = XmlLanguage.GetLanguage (CultureInfo.CurrentCulture.IetfLanguageTag);
O vous pouvez inclure le balisage xml xml: lang = "en-GB" dans le balisage de l'en-tête de la fenêtre
<DataGridTextColumn Header="Last update"
Width="110"
IsReadOnly="True"
Binding="{Binding Path=Contact.TimeUpdate, StringFormat={}\{0:dd/MM/yyyy hh:mm\}, Mode=OneWay}" />
J'utiliserais un DataTemplate avec un DataType de Date ou DateTime (selon lequel il apparaîtra comme). Placez un TextBlock dans le DataTemplate avec un StringFormat dans la liaison.
Quelque chose comme ça devrait fonctionner (non testé)
<DataTemplate DataType="{x:Type DateTime}">
<TextBlock Text="{Binding StringFormat={0:d}}" />
</DataTemplate>
Ou si vous voulez qu'il s'applique uniquement dans la grille
<wpfToolkit:DataGrid>
<wpfToolkit:DataGrid.Resources>
<DataTemplate DataType="{x:Type DateTime}">
<TextBlock Text="{Binding StringFormat={0:d}}" />
</DataTemplate>
</wpfToolkit:DataGrid.Resources>
...
</wpfToolkit:DataGrid>
dataGridTextColumn.Binding.StringFormat = "{0: jj/MM/aaaa}";
a travaillé magnifiquement
je cours de cette façon. son travail terminé.
<TextBlock Text="{Binding Date_start, StringFormat=\{0:dd-MM-yyyy\}, Mode=OneWay}" />
La réponse de FarrEver, le 11 mai est bonne, mais selon moi, cela ne fonctionne pas. je reçois toujours mm/jj/aaa américain à la place de mon jj/mm/aaaa allemand Je propose donc de trouver les paramètres régionaux de l'ordinateur et de l'utiliser dans 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
voir aussi: mon blog