using System.Windows.Forms.DataVisualization.Charting; using Duesk.Api.Models; using Duesk.Utils; namespace Duesk.Forms; public partial class TimeSeriesForm : Form { private List _profiles; private string _groupName; private ComboBox cboCompetence; private Chart chart; private DataGridView dgvData; private List _competenceValues = new List(); private List _profileNames = new List(); public TimeSeriesForm(List profiles, string groupName) { _profiles = profiles; _groupName = groupName; InitializeComponent(); CalculateAllProfiles(); UpdateChart(); } private void InitializeComponent() { this.Text = $"Zeitreihe - {_groupName}"; this.Size = new Size(1000, 700); this.StartPosition = FormStartPosition.CenterParent; // Top Panel mit ComboBox var topPanel = new Panel { Dock = DockStyle.Top, Height = 50, Padding = new Padding(10) }; var lblComp = new Label { Text = "Kompetenz:", Location = new Point(10, 15), Size = new Size(80, 25) }; cboCompetence = new ComboBox { Location = new Point(100, 12), Size = new Size(200, 25), DropDownStyle = ComboBoxStyle.DropDownList }; foreach (var comp in Norms.Kompetenzen) { cboCompetence.Items.Add(comp); } cboCompetence.SelectedIndex = 0; cboCompetence.SelectedIndexChanged += (s, e) => UpdateChart(); topPanel.Controls.Add(lblComp); topPanel.Controls.Add(cboCompetence); // SplitContainer var splitContainer = new SplitContainer { Dock = DockStyle.Fill, Orientation = Orientation.Horizontal }; // Chart chart = new Chart { Dock = DockStyle.Fill }; var chartArea = new ChartArea(); chart.ChartAreas.Add(chartArea); splitContainer.Panel1.Controls.Add(chart); // DataGridView dgvData = new DataGridView { Dock = DockStyle.Fill, AllowUserToAddRows = false, ReadOnly = true, AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill }; dgvData.ColumnCount = 8; dgvData.Columns[0].HeaderText = "Nr."; dgvData.Columns[1].HeaderText = "Name"; for (int i = 0; i < 6; i++) { dgvData.Columns[i + 2].HeaderText = Norms.Kompetenzen[i]; } splitContainer.Panel2.Controls.Add(dgvData); // Close Button var closeBtn = new Button { Text = "Schließen", Size = new Size(100, 35), Location = new Point(450, 660), Anchor = AnchorStyles.Bottom, BackColor = Color.FromArgb(102, 153, 204), ForeColor = Color.White, FlatStyle = FlatStyle.Flat }; closeBtn.Click += (s, e) => Close(); this.Controls.Add(closeBtn); this.Controls.Add(splitContainer); this.Controls.Add(topPanel); } private void CalculateAllProfiles() { foreach (var profile in _profiles) { // Items extrahieren int[] seItems = new int[36]; for (int i = 1; i <= 36; i++) { seItems[i - 1] = profile.GetItem(i); } // Summen berechnen int[] sums = Calculator.CalculateSums(seItems); // Profilwerte berechnen (mit HS-Normen) int[] values = Calculator.CalculateProfileValues(sums, Norms.NormSeHs); // Auf 1-5 skalieren int[] scaledValues = new int[6]; for (int i = 0; i < 6; i++) { scaledValues[i] = values[i] + 1; } _competenceValues.Add(scaledValues); _profileNames.Add(profile.Name ?? "Unbekannt"); } // DataGridView füllen for (int i = 0; i < _profiles.Count; i++) { dgvData.Rows.Add(); dgvData.Rows[i].Cells[0].Value = i + 1; dgvData.Rows[i].Cells[1].Value = _profileNames[i]; for (int j = 0; j < 6; j++) { dgvData.Rows[i].Cells[j + 2].Value = _competenceValues[i][j]; } } } private void UpdateChart() { int compIndex = cboCompetence.SelectedIndex; chart.Series.Clear(); var series = new Series(Norms.Kompetenzen[compIndex]) { ChartType = SeriesChartType.Line, BorderWidth = 3, MarkerSize = 8, MarkerStyle = MarkerStyle.Circle, Color = Color.Blue }; for (int i = 0; i < _competenceValues.Count; i++) { series.Points.AddXY(i + 1, _competenceValues[i][compIndex]); } chart.Series.Add(series); chart.ChartAreas[0].AxisX.Title = "Profile"; chart.ChartAreas[0].AxisY.Title = "Wert (1-5)"; chart.ChartAreas[0].AxisY.Minimum = 1; chart.ChartAreas[0].AxisY.Maximum = 5; } }