wake-up-neo.net

Datumsformatierung in WPF-Datagrid

Ich habe stackoverflow bereits nach einer Lösung gesucht und folgendes gefunden: 

Datumsangaben müssen in dynamisch erstelltem WPF DataGrid formatiert werden

Mein Problem ist, dass ich einige Daten aus meiner SQL-Server-Datenbank lade und diese in meiner WPF-Anwendung in einem DataGrid anzeigen möchte. Das funktioniert sehr gut. Das einzige, was ich ändern möchte, ist, dass die Datumsspalte im Format "TT/MM/JJJJ HH: MM: SS" ist und ich möchte "DD.MM.YYYY". Ok, dann schaute ich auf den Link unten und versuchte es in meinem Programm: 

<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>

Der auskommentierte Teil ist meine Lösung, löst jedoch eine XMLParseException aus. Ist diese Lösung erst möglich, wenn AutoGenerateColumns verwendet wird? Falls nein, wie kann ich sonst versuchen, damit umzugehen? Wenn ja, was ist das Problem mit dem obigen Code?

EDIT: Meine Frage ist nicht gelöst, da ich mich entschieden habe, meine Anwendung nicht neu zu erstellen. Gibt es keine Lösung mit AutoGenerateColumns = true?

50
Harald

Vergessen Sie nicht, DataGrid.Columns zu verwenden. Alle Spalten müssen sich in dieser Sammlung befinden .. In meinem Projekt formatiere ich Datum etwas anders

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

Mit AutoGenerateColumns können Sie die Formatierung nicht steuern, da DataGird eigene Spalten hinzufügt.

97
icebat

Sehr spät zur Party hier, aber falls jemand anderes über diese Seite stolpert ...

Sie können dies tun, indem Sie den AutoGeneratingColumn-Handler in XAML festlegen:

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

Und dann hinter dem Code so etwas tun:

private void OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
    if (e.PropertyType == typeof(System.DateTime))
        (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy";
}
69
Mark Feldman

Wenn Ihre gebundene Eigenschaft DateTime ist, brauchen Sie nur noch 

Binding={Property, StringFormat=d}
14
Terence
Binding="{Binding YourColumn ,StringFormat='yyyy-MM-dd'}"
1
Dan Andrews

wählen Sie zuerst Datagrid aus und gehen Sie zu Eigenschaften, suchen Sie nach Datagrid_AutoGeneratingColumn und doppelklicken Sie auf Verwenden Sie dann diesen 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";
            }

Ich versuche es auf WPF

0
ANIL AYDINALP

Ich weiß, dass die akzeptierte Antwort ziemlich alt ist, aber es gibt eine Möglichkeit, die Formatierung mit AutoGeneratColumns zu steuern: 

Erstellen Sie zuerst eine Funktion, die ausgelöst wird, wenn eine Spalte generiert wird: 

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

Prüfen Sie dann, ob der Typ der generierten Spalte eine DateTime ist, und ändern Sie einfach das String-Format in "d", um den Zeitteil zu entfernen: 

private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            if(YourColumn == typeof(DateTime))
            {
                e.Column.ClipboardContentBinding.StringFormat = "d";
            }
        }
0
Treycos