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.

29
demandé sur FarrEver 2009-05-11 19:38:50

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

48
répondu Junior M 2009-08-21 21:04:31

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}";
        }
    }
}
30
répondu FarrEver 2012-06-14 12:07:33

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

17
répondu Libi James 2009-12-03 08:21:32
<DataGridTextColumn Header="Last update"
    Width="110"
    IsReadOnly="True"
    Binding="{Binding Path=Contact.TimeUpdate, StringFormat={}\{0:dd/MM/yyyy hh:mm\}, Mode=OneWay}" />
8
répondu MAXE 2011-09-01 08:14:20

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>
7
répondu Bryan Anderson 2009-05-11 18:26:05

dataGridTextColumn.Contraignant.StringFormat = " {0: JJ/ MM / AAAA}";

beautifully worked

3
répondu Web Developer 2011-06-09 20:32:25

Je cours par ici. son travail achevé .

<TextBlock  Text="{Binding Date_start,  StringFormat=\{0:dd-MM-yyyy\}, Mode=OneWay}" />
2
répondu Rashed DIP 2015-02-26 22:23:45

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

0
répondu 2009-09-02 12:59:48