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