/// <summary> /// Wenn auf den Knopf Einzel Ansicht geklickt wird, /// wird ein neues Objekt vom Typ UC_EinzelAnsicht erzeugt und angezeigt. /// Dies öffnet das Fenster um einen neuen Einsatz zu erstellen. /// </summary> /// <param name="sender">Button Objekt</param> /// <param name="e">Event Parameter</param> private void einzel_ansicht_neu_Click(object sender, RoutedEventArgs e) { EinzelAnsicht einzelAnsicht = new EinzelAnsicht(0); einzelAnsicht.Show(); // Solange das EinzelAnsicht Fenster offen ist, soll das MainWindow gesperrt sein. this.IsEnabled = false; // Die Breite und die Höhe des MainWindow werden auf 500 und 300 gesezt. this.Width = this.MinWidth = this.MaxWidth = 500; this.Height = 300; // Das MainWindow darf nicht vergrössert oder verkleinert werden. this.ResizeMode = ResizeMode.NoResize; // Wenn das EinzelAnsicht Fenster geschlossen wird, wird das MainWindow wieder freigegeben und die Listen Ansicht wird angezeigt. einzelAnsicht.Closed += new EventHandler((o, args) => { this.IsEnabled = true; UCView.Content = new UC_ListenAnsicht(); }); }
/// <summary> /// Wenn auf einen Einsatz geklickt wird, wird eine EinzelAnsicht geöffnet in der der Einsatz /// bearbeitet werden kann. /// </summary> /// <param name="sender">DataGrid Objekt</param> /// <param name="e">Event Parameter</param> private void listen_ansicht_MouseDoubleClick(object sender, MouseButtonEventArgs e) { // Das Sender Objekt wird in ein DataGrid konvertiert und // das ausgewählte Element wird geholt. DataGrid grid = sender as DataGrid; Data einsatzData = grid.SelectedValue as Data; // Eine EinzelAnsicht wird erstellt und als Parameter die Id des geklickten Einsatzes. EinzelAnsicht einzelAnsicht = new EinzelAnsicht(einsatzData.ID); // Die EinzelAnsicht wird angezeigt und das MainWindow wird gesperrt. einzelAnsicht.Show(); Window.GetWindow(this).IsEnabled = false; // Wenn das EinzelAnsicht Fenster geschlossen wird, wird das // MainWindow wieder aktiviert, und ddas DataGrid wird aktualisiert. einzelAnsicht.Closed += new EventHandler((o, args) => { Window.GetWindow(this).IsEnabled = true; setData(); }); }
/// <summary> /// Diese Methode generiert den Kalender und sezt die Aktuelle Woche. Wenn sich in dieser Woche /// Einsätze befinden, werden diese mit Dauer angezeigt. /// </summary> private void generiereKalender() { // Den Kopfzeilen werden das Datum hinzugefügt. montag_datum.Content += "\n" + Woche[0].Date.ToShortDateString(); dienstag_datum.Content += "\n" + Woche[1].Date.ToShortDateString(); mittwoch_datum.Content += "\n" + Woche[2].Date.ToShortDateString(); donnerstag_datum.Content += "\n" + Woche[3].Date.ToShortDateString(); freitag_datum.Content += "\n" + Woche[4].Date.ToShortDateString(); samstag_datum.Content += "\n" + Woche[5].Date.ToShortDateString(); sonntag_datum.Content += "\n" + Woche[6].Date.ToShortDateString(); foreach (Einsatz e in Bibliothek.Einsatz_Alle()) { foreach (DateTime tag in Woche) { if (e.Start.Date == tag.Date) { // Wenn das Datum des Wochentages des Einsatzes mit dem Datum des Wochentages in der foreach Schlaufe übereinstimmt, // Wird ein Button generiert. Button feld = new Button(); feld.BorderThickness = new Thickness(0, 0, 0, 0); // Der Text des Buttons wird auf die ID des Einsatzes gesezt da für mehr kein Platz ist. feld.Content = "ID: " + e.ID.ToString(); // Als ToolTip werden weitere Informationen angezeigt. feld.ToolTip = "Mitarbeiter: " + e.Mitarbeiter.Vorname + " " + e.Mitarbeiter.Name + "\nProjekt: " + e.Projekt.Name; feld.Width = 50; // Die höhe des Buttons entspricht der Dauer des Einsatzes. Eine Minute entspricht einem Pixel. feld.Height = ((e.Ende.Hour * 60) + e.Ende.Minute) - ((e.Start.Hour * 60) + e.Start.Minute); // Die Hintergrundfarbe des Buttons wird auf die Farbe des EInsatzes gsesezt. feld.Background = new SolidColorBrush(e.Farbe); // Der Abstand oben ist die Startzeit in Pixel also bei 02:00 wären es 120 Pixel. // Das bewirkt dass der Button Dort anfängt wo die Startzeit ist. feld.Margin = new Thickness(0, (e.Start.Hour * 60) + e.Start.Minute, 0, 0); // Nun wird noch definiert das der Button standartmässig im linken oberen Ecken ist ( falls keine Abstände definiert sind ). feld.HorizontalAlignment = HorizontalAlignment.Left; feld.VerticalAlignment = VerticalAlignment.Top; // Es wird noch ein EventHandler gesezt das wenn auf den Button geklickt wird, // wird der Einsatz in der Einzel Ansicht dargestellt und kann bearbeitet werden. feld.Click += (sender, args) => { // Eine Einzel Ansicht wird erstellt und angezeigt. EinzelAnsicht einzelAnsicht = new EinzelAnsicht(e.ID); einzelAnsicht.Show(); // Das MainWindow wird gesperrt. Window.GetWindow(this).IsEnabled = false; // Wenn das Fenster geschlossen wird, soll es den Kalender neu erstellen, // da die Daten des EInsatzes geändert werden können während die EInzel Ansicht offen ist. einzelAnsicht.Closed += new EventHandler((o, args2) => { // Das MainWindow wird wieder aktiviert. Window.GetWindow(this).IsEnabled = true; // Für jeden Wochentag wird das Grid geleert. foreach (KeyValuePair <string, Grid> eintrag in TagZuSpalte) { löscheKalender(); } // Nun wird der Kalender neu generiert. generiereKalender(); }); }; // Der Button wird zu dem passenden Grid hinzugefügt. TagZuSpalte[e.Start.DayOfWeek.ToString()].Children.Add(feld); // Wenn die Mitarbeiter ID grösser 1 ist, wird der Einsatz in die rechte Kolonne gesezt. if (e.Mitarbeiter.ID > 1) { feld.SetValue(Grid.ColumnProperty, 1); } // Wenn die Mitarbeiter ID kleiner 1 ist, wird der Einsatz in die linke Kolonne gesezt. else { feld.SetValue(Grid.ColumnProperty, 0); } // Der Button wird im Grid in die erste Reihe gesezt. feld.SetValue(Grid.RowProperty, 0); } } } }