WPF: Spalten Anzeige Format anpassen
Wie passt man die automatische Anzeige einer Datum-Spalte in einem WPF Datengrid an?
Problem:
Wenn ich wie hier dargestellt 4 Uhrzeit Spalten mit Binding in ein Datengrid einbinde, dann wird der Wert als 04:00:00 angezeigt.
Soll-Anzeige:
In Kurzem Zeitformat wie 04:00
Ist-Zustand:
Die Tabelle ist zurzeit so eingebunden in XAML
<DataGrid x:Name="ctlDataGrid" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" AutoGenerateColumns="False" GridLinesVisibility="All" Background="#F0f0f0" ItemsSource="{Binding}" SelectionMode="Single" IsReadOnly="True" MouseDoubleClick="ctlDataGrid_MouseDoubleClick" SelectionChanged="CtlDataGrid_SelectionChanged" HeadersVisibility="All" Grid.Row="1" >
<DataGrid.Columns> <DataGridTextColumn Header="ID" Binding="{Binding IDSchichmodell}" /> <DataGridTextColumn Header="Kürzel" Binding="{Binding Kurz}" /> <DataGridTextColumn Header="Bezeichnung" Binding="{Binding Schichtmodell}" /> <DataGridTextColumn Header="von" Binding="{Binding Schicht_Beginn}" /> <DataGridTextColumn Header="bis" Binding="{Binding Schicht_Ende}" /> <DataGridTextColumn Header="Dauer" Binding="{Binding Schicht_Dauer}" /> <DataGridTextColumn Header="Pause" Binding="{Binding Schicht_Pause}" /> <DataGridTextColumn Header="Nr" Binding="{Binding SortierNr}" />
<DataGridTextColumn Header="Farbe" > <DataGridTextColumn.CellStyle> <Style TargetType="DataGridCell"> <Setter Property="Background" Value="{Binding Farbe}" /> </Style> </DataGridTextColumn.CellStyle> </DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
|
Und die Daten werden direkt über eine Linq Datenabfrage angebunden
//< get_Data > var data = (from tbl in db.tblBase_Schichten orderby tbl.IDSchicht ascending select tbl).Take(1000); //</ get_Data >
//--< @Loop: Rows >-- foreach (var row in data) {
ctlDataGrid.Items.Add(row); } //--</ @Loop: Rows >--
|
Lösung:
Die Formatierung des Datums wird in den Binding Ausdruck gelegt
Für Zeit-Felder speziell muss man folgende Formatierung verwenden
StringFormat='hh\\:mm' |
Im Datagrid einer TextColumn wird die Formatierung direkt hinter die Binding Anweisung geschrieben
<DataGridTextColumn Header="Schicht" Binding="{Binding Schichtmodell}" /> <DataGridTextColumn Header="von" Binding="{Binding Schicht_Beginn, StringFormat='hh\\:mm'}" /> <DataGridTextColumn Header="bis" Binding="{Binding Schicht_Ende, StringFormat='hh\\:mm'}" /> <DataGridTextColumn Header="Dauer" Binding="{Binding Schicht_Dauer, StringFormat='hh\\:mm'}" /> <DataGridTextColumn Header="Pause" Binding="{Binding Schicht_Pause, StringFormat='hh\\:mm'}" />
|
Lösung mit kurzen Zeitformat