Readdy Write  
0,00 €
Your View Money
Views: Count
Self 20% 0
Your Content 60% 0

Users by Links 0
u1*(Content+Views) 10% 0
Follow-Follower 0
s2*(Income) 5% 0

Count
Followers 0
Login Register as User

WPF: Kurze Zeit in Grid-Spalten als Anzeige Format anpassen

28.12.2018 (👁8749)

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