Inhalt

Aktueller Ordner: duesseldorfer-schuelerinventar-csharp-client/Duesk/Forms
⬅ Übergeordnet

GroupManagerForm.cs

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<Group> _groups = new List<Group>();
    
    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<Group>();
            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);
            }
        }
    }
}