using Duesk.Api; using Duesk.Api.Models; namespace Duesk.Forms; public partial class GroupManagerForm : Form { private DataGridView dgvGroups; private TextBox txtNewGroup; private Button btnAdd; private Button btnDelete; private Button btnClose; private List _groups = new List(); public GroupManagerForm() { InitializeComponent(); LoadGroups(); } private void InitializeComponent() { this.Text = "Gruppenverwaltung"; this.Size = new Size(500, 450); this.StartPosition = FormStartPosition.CenterParent; this.FormBorderStyle = FormBorderStyle.FixedDialog; this.MaximizeBox = false; // Neues Gruppen-Panel var addPanel = new Panel { Dock = DockStyle.Top, Height = 50, Padding = new Padding(10) }; var lblNew = new Label { Text = "Neue Gruppe:", Location = new Point(10, 15), Size = new Size(80, 25) }; txtNewGroup = new TextBox { Location = new Point(100, 12), Size = new Size(250, 25) }; btnAdd = new Button { Text = "Hinzufügen", Location = new Point(360, 10), Size = new Size(100, 30), BackColor = Color.FromArgb(76, 175, 80), ForeColor = Color.White, FlatStyle = FlatStyle.Flat }; btnAdd.Click += BtnAdd_Click; addPanel.Controls.Add(lblNew); addPanel.Controls.Add(txtNewGroup); addPanel.Controls.Add(btnAdd); // DataGridView für Gruppen dgvGroups = new DataGridView { Dock = DockStyle.Fill, AllowUserToAddRows = false, ReadOnly = true, SelectionMode = DataGridViewSelectionMode.FullRowSelect, AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill }; dgvGroups.Columns.Add("Name", "Gruppenname"); // Button Panel var buttonPanel = new Panel { Dock = DockStyle.Bottom, Height = 50, Padding = new Padding(10) }; btnDelete = new Button { Text = "Löschen", Location = new Point(10, 10), Size = new Size(100, 30), BackColor = Color.FromArgb(244, 67, 54), ForeColor = Color.White, FlatStyle = FlatStyle.Flat }; btnDelete.Click += BtnDelete_Click; btnClose = new Button { Text = "Schließen", Location = new Point(390, 10), Size = new Size(100, 30) }; btnClose.Click += (s, e) => Close(); buttonPanel.Controls.Add(btnDelete); buttonPanel.Controls.Add(btnClose); this.Controls.Add(dgvGroups); this.Controls.Add(addPanel); this.Controls.Add(buttonPanel); } private async void LoadGroups() { Cursor = Cursors.WaitCursor; try { _groups = await ApiClient.GetGroupsAsync() ?? new List(); dgvGroups.Rows.Clear(); foreach (var group in _groups) { dgvGroups.Rows.Add(group.Name); } } catch (Exception ex) { MessageBox.Show($"Fehler beim Laden: {ex.Message}", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { Cursor = Cursors.Default; } } private async void BtnAdd_Click(object? sender, EventArgs e) { string name = txtNewGroup.Text.Trim(); if (string.IsNullOrEmpty(name)) { MessageBox.Show("Bitte Gruppennamen eingeben!", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } Cursor = Cursors.WaitCursor; btnAdd.Enabled = false; var success = await ApiClient.CreateGroupAsync(name); btnAdd.Enabled = true; Cursor = Cursors.Default; if (success) { txtNewGroup.Text = ""; LoadGroups(); } else { MessageBox.Show("Fehler beim Erstellen der Gruppe!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private async void BtnDelete_Click(object? sender, EventArgs e) { if (dgvGroups.SelectedRows.Count == 0) { MessageBox.Show("Bitte wählen Sie eine Gruppe aus!", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } int index = dgvGroups.SelectedRows[0].Index; if (index >= _groups.Count) return; var group = _groups[index]; var result = MessageBox.Show($"Möchten Sie die Gruppe '{group.Name}' wirklich löschen?", "Gruppe löschen", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (result == DialogResult.Yes) { Cursor = Cursors.WaitCursor; btnDelete.Enabled = false; var success = await ApiClient.DeleteGroupAsync(group.GroupId); btnDelete.Enabled = true; Cursor = Cursors.Default; if (success) { LoadGroups(); } else { MessageBox.Show("Fehler beim Löschen der Gruppe!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }