Inhalt
Aktueller Ordner:
duesseldorfer-schuelerinventar-csharp-client/Duesk/FormsGroupManagerForm.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);
}
}
}
}