Cell Formatierung in WPF?

MMazi

Grünschnabel
Hallo alle zusammen, ich habe ein Programm, das die Zeiten erfasst der Code schreibt die Start zeit in textfeld Start und End Zeit in textfeld Ende ,diese würde in in Observable Collection gespeichert als Liste.
dann die liste wird in Datagrid tabelle hinzugefügt dann wird die ganze in eine text datei geschrieben.

nun die Format in Textfelder könnte ich so umformen wie es gewünscht ist und auch in textdatei könnte ich alles so umformen, in dem ich die To string Methode in Timer klasse überschrieben habe und in gewünschte Format als String züruck gegebn habe.

das Problem ist wie kann ich die Formaten in Dtagrid umformen?

die Differenz geschieht hier:

ich weiss es nicht ob ObservableCollection eine gute Wahl wäre und ob man an jede einzelene Elemente in diese Art von Listen ran kommen kann und Format zu ändern?

es soll statt:
00:00:00.000000
diese werden :
00:00:00

Danke in Voraus für die Antworten

C#:
using System;


using System.Collections.Generic;


using System.Collections.ObjectModel;


using System.Collections.Specialized;


using System.Windows;


using System.Windows.Controls;


using System.Windows.Forms;


using System.Drawing;


using System.Linq;


using System.IO;



namespace TimeRecorderPro


{


    /// <summary>


    /// Interaktionslogik für MainWindow.xaml


    /// </summary>


    public partial class MainWindow : Window


    {


        public DateTime startTime;


        public DateTime endTime;


        public Timer _currentTimer;


        public DateTime Dauer;



        System.Windows.Forms.NotifyIcon notifyIcon = new System.Windows.Forms.NotifyIcon();



        public void SetinTab()


        {


            Timers.Add(_currentTimer);


            btnStart.Content = "Start";


        }


        void Löschen()


        {


            txtStart.Text = "";


            txtEnde.Text = "";


        }


        public void BemerkungEinfuegen(string str)


        {


            _currentTimer.Bemerkung = str;


        }


        private ObservableCollection<Timer> Timers;


        public MainWindow()


        {


            InitializeComponent();


            Timers = new ObservableCollection<Timer>{};


            lstNames.ItemsSource = Timers;


            this.ShowInTaskbar = false;



            notifyIcon.Icon = new System.Drawing.Icon(@"C:\Users\mmohammadi\source\repos\WPF Proj\TimeRecorderPro\TimeRecorderPro\bin\Debug\66164.ico");



            notifyIcon.MouseClick += notifyIcon_MouseDoubleClick;


        }


        private void btnStart_Click(object sender, RoutedEventArgs e)



        {


            if ((string)btnStart.Content == "Start")


            {


                _currentTimer = new Timer();


                txtStart.Text = _currentTimer.Start.ToString("T");


                btnStart.Content = "Ende";


            }


            else


            {


                _currentTimer.Ende = DateTime.Now;


                txtEnde.Text = _currentTimer.Ende.ToString("T");



                _currentTimer.Dauer = _currentTimer.Ende - _currentTimer.Start;



                txtEnde.Text = _currentTimer.Ende.ToString("T");



                Bemerkung bemerkungsdialog = new Bemerkung();


                bemerkungsdialog.Owner = this;


                bemerkungsdialog.WindowStartupLocation = WindowStartupLocation.CenterOwner;


                bemerkungsdialog.ShowDialog();



                SetinTab();


                Löschen();


            }


        }


        private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)


        {



            MessageBoxResult mbresult = System.Windows.MessageBox.Show("Möchten Das Programm wirklich beenden?", "Programm beenden", MessageBoxButton.YesNo);



            if (MessageBoxResult.No == mbresult)


            {


                e.Cancel = false;



            }



            e.Cancel = true;


            this.Visibility = Visibility.Hidden;





            string testtext = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "/Zeitbuchung_" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt";




            var objWriter = new System.IO.StreamWriter(testtext);





            foreach (Timer timer in Timers)


            {


                objWriter.WriteLine(timer.ToString());


            }




            objWriter.Close();


            notifyIcon.Visible = true;


        }




        private void lstNames_SelectionChanged(object sender, SelectionChangedEventArgs e)


        {



        }



        private void Window_SizeChanged(object sender, SizeChangedEventArgs e)


        {


            if (this.WindowState == WindowState.Minimized)



            {




            }




        }




        private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)


        {



            this.WindowState = WindowState.Normal;


            notifyIcon.Visible = false;


            this.Show();



        }



    }




                public class Timer


                {


                    public Timer()


                    {


                        Start = DateTime.Now;


                    }


                    public DateTime Start { get; set; }


                    public DateTime Ende { get; set; }


                    public TimeSpan Dauer { get; set; }


                    public string Bemerkung { get; set; }




        public override string ToString()


        {



            return "Start : " + Start.ToString("T") + " \nEnde  : " + Ende.ToString("T")


                              + "\nDauer : " + Dauer.TotalHours.ToString("0.00") + "\nBemerkung : " + Bemerkung.ToString();


                                          }



                }



}

XAML Code wo die Daten formatiert angezeigt werden müssen:
XML:
</StackPanel>
        <ListView
            x:Name="lstNames"
            Grid.Row="0"
            Grid.Column="1"
            Margin="5,5,5,5" SelectionChanged="lstNames_SelectionChanged">
            <ListView.View >
                <GridView x:Name="grdNames">
                    <GridViewColumn
                        Width="100"
                        DisplayMemberBinding="{Binding Start}"
                        Header="Start" />
                    <GridViewColumn
                        Width="100"
                        DisplayMemberBinding="{Binding Ende}"
                        Header="Ende" />
                    <GridViewColumn
                        x:Name="sptDauer"
                        Width="100"
                        DisplayMemberBinding="{Binding Dauer}"
                        Header="Dauer" />
                    <GridViewColumn
                        Width="150"
                        DisplayMemberBinding="{Binding Bemerkung}"
                        Header="Bemerkung"/>
                 </GridView>
            </ListView.View>
        </ListView>
 

Anhänge

  • tetp1.PNG
    tetp1.PNG
    27,2 KB · Aufrufe: 1
Zuletzt bearbeitet:

Spyke

Premium-User
Eigentlich müsste es gehen wenn du bei der Binding einfach StringFormat mit angibst
XML:
                    <GridViewColumn
                        Width="100"
                        DisplayMemberBinding="{Binding Ende, StringFormat='{}{0:HH\\:mm\\:ss}'}"
                        Header="Ende" />
(weiß grad nicht ob die doppelpunkt der Formatierungsangabe mit einem \ oder zwei \\ escaped werden müssen)

oder
XML:
                    <GridViewColumn
                        Width="100"
                        DisplayMemberBinding="{Binding Ende, StringFormat='{}{0:T}'}"
                        Header="Ende" />
es gehen die Formatierungsangaben wie unter C# bei der ToString Methode eines Datentyps
 
Zuletzt bearbeitet:

MMazi

Grünschnabel
Dankeschön hat gut geklappt aber aktuell versuche ich eine NotifyIcon in wpf reinbringen , wüsstest du wie das am besten gehen würde?
 

Spyke

Premium-User
ne sry
kurzes gogglen erbrachte das einige vorschlagen dies mittels der WinForms funktionalität zu machen.
Aber dazu kann i nixs sagen.
 

Neue Beiträge