Mise en forme de la Date dans la matrice de données du FPF

j'ai déjà cherché stackoverflow une solution et j'ai trouvé ceci:

besoin de formater les dates dans un DataGrid WPF construit dynamiquement

mon problème est que je charge certaines données de ma base de données SQL-Server et que je veux les afficher dans mon application WPF dans un DataGrid. Cela fonctionne très bien. La seule chose que je veux changer est que la colonne date est dans le format "JJ/MM/aaaa HH:MM:SS" et je veux avoir "JJ.MMM.YYYY". OK, puis j'ai regardé le lien ci-dessous et essayé dans mon programme:

<Grid Width="648" Height="263">

  <Grid.ColumnDefinitions>
       <ColumnDefinition Width="172*" />
       <ColumnDefinition Width="90*" />
       <ColumnDefinition Width="386*" />
  </Grid.ColumnDefinitions>

  <DataGrid Name="dgBuchung" Height="213" HorizontalAlignment="Left" Margin="30,16,0,0"     VerticalAlignment="Top" Width="595" AutoGenerateColumns="True" ItemsSource="{Binding}" Grid.ColumnSpan="3" Foreground="Black" BorderBrush="#FF688CAF" Opacity="1" Background="White" BorderThickness="1" >
 <!-- <ab:DataGridTextColumn Header="Fecha Entrada" Width="110"  
       Binding="{Binding date, StringFormat={}{0:dd/MM/yyyy}}" IsReadOnly="True" />
                        -->
</DataGrid>

</Grid>

la partie commentée out est ma solution mais elle lance une XMLParseException. Tout d'abord, ce moyen de solution est-il possible en utilisant des AutoGenerateColumns? Si non, comment puis-je essayer de gérer cela? Si oui, quel est le problème avec le code ci-dessus?

EDIT: Ma question n'est pas résolue parce que j'ai décidé de ne pas reconstruire mon application, n'y a-t-il pas une solution avec AutoGenerateColumns=true?

49
demandé sur Community 2011-11-02 13:40:37

6 réponses

N'oubliez pas D'utiliser DataGrid.Colonnes, toutes les colonnes doivent être à l'intérieur de cette collection. Dans mon projet, j'ai formaté la date un peu différemment:

<tk:DataGrid>
    <tk:DataGrid.Columns>
        <tk:DataGridTextColumn Binding="{Binding StartDate, StringFormat=\{0:dd.MM.yy HH:mm:ss\}}" />
    </tk:DataGrid.Columns>
</tk:DataGrid>

avec AutoGenerateColumns vous ne serez pas en mesure de contol formatage car DataGird ajoutera ses propres colonnes.

94
répondu icebat 2011-11-02 10:03:18

très tard à la fête ici, mais au cas où quelqu'un d'autre trébucherait sur cette page...

vous pouvez le faire en paramétrant le handler AutoGeneratingColumn dans XAML:

<DataGrid AutoGeneratingColumn="OnAutoGeneratingColumn"  ..etc.. />

et puis derrière le code faire quelque chose comme ceci:

private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(System.DateTime))
        (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy";
}
67
répondu Mark Feldman 2013-09-27 22:52:20

si votre propriété liée est DateTime, alors tout ce dont vous avez besoin est

Binding={Property, StringFormat=d}
14
répondu Terence 2013-04-03 20:33:01

je sais que la réponse acceptée est assez ancienne, mais il y a une façon de contrôler le formatage avec des AutoGeneratColumns:

créer D'abord une fonction qui se déclenche lorsqu'une colonne est générée:

<DataGrid x:Name="dataGrid" AutoGeneratedColumns="dataGrid_AutoGeneratedColumns" Margin="116,62,10,10"/>

puis vérifiez si le type de la colonne générée est une DateTime et changez simplement son format de chaîne de caractères en "d" pour supprimer la partie de temps:

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            if(YourColumn == typeof(DateTime))
            {
                e.Column.ClipboardContentBinding.StringFormat = "d";
            }
        }
0
répondu Treycos 2017-06-09 14:21:39

sélectionnez d'abord datagrid puis allez à propriétés trouver Datagrid_AutoGeneratingColumn et le double clic Et puis utilisez ce code

   Datagrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
            {
                if (e.PropertyName == "Your column name")
                    (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MMMMMMMMM/yyyy";
                if (e.PropertyName == "Your column name")
                    (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MMMMMMMMM/yyyy";
            }

je l'ai essayer il fonctionne sur WPF

0
répondu ANIL AYDINALP 2017-08-29 10:54:47
Binding="{Binding YourColumn ,StringFormat='yyyy-MM-dd'}"
0
répondu Dan Andrews 2018-07-26 21:17:32