Besoin de formater les dates dans un DataGrid WPF construit dynamiquement
nous lions un résultat inconnu à un DataGrid WPF au moment de l'exécution. Certaines de nos colonnes vont contenir des valeurs DateTime et nous devons formater correctement ces champs date time. Sans savoir quelles colonnes seront des champs DateTime au moment de la conception, Comment Pouvons-nous formater les colonnes à l'exécution?
nous utilisons la vue DefaultView D'un DataTable pour nous lier à la base de données WPF.
8 réponses
à propos
<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 trouvé comment faire ça en code...j'espère qu'il y a un moyen d'imiter ça à XAML. (Merci de poster Si vous trouvez un échantillon XAML fonctionnel.)
pour accomplir ceci en code, Ajouter un gestionnaire d'événement 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}";
}
}
}
hey vous pouvez définir l'info de culture locale dans le constructeur du formulaire WPF comme
this.Language = XmlLanguage.GetLanguage (CultureInfo.CurrentCulture.Ietflanguagetag);
Ou , vous pouvez inclure le balisage xml xml:lang="en-GB" dans le titre de la fenêtre balisage
<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 (en fonction de laquelle il passera en tant que). Placez un texte dans DataTemplate avec une chaîne de caractères dans la reliure.
quelque chose comme ça devrait marcher (non testé)
<DataTemplate DataType="{x:Type DateTime}">
<TextBlock Text="{Binding StringFormat={0:d}}" />
</DataTemplate>
ou si vous voulez qu'il s'applique juste 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.Contraignant.StringFormat = " {0: JJ/ MM / AAAA}";
beautifully worked
Je cours par ici. son travail achevé .
<TextBlock Text="{Binding Date_start, StringFormat=\{0:dd-MM-yyyy\}, Mode=OneWay}" />
la réponse de FarrEver, 11 Mai est bonne, mais par moi elle ne fonctionne pas. je reçois toujours américain mm / JJ/yyy à la place de mon JJ/mm / yyyy 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