SkyTeam/AdminDashBoard.xaml.cs aktualisiert
This commit is contained in:
@@ -61,6 +61,12 @@ namespace SkyTeam
|
|||||||
DataRowView row = (DataRowView)AllFlightsGrid.SelectedItem;
|
DataRowView row = (DataRowView)AllFlightsGrid.SelectedItem;
|
||||||
if (MessageBox.Show("Flug löschen?", "Confirm", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
if (MessageBox.Show("Flug löschen?", "Confirm", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||||
{
|
{
|
||||||
|
// Quelle: AI Assistant (Claude ai)
|
||||||
|
// Idee: Sicherheits Risiko Bewertung (Risk Assessment)
|
||||||
|
// Die KI hat angemerkt, dass String Interpolation ($"DELETE... {uid}") bei SQL Queries
|
||||||
|
// normalerweise ein No Go ist (SQL Injection Gefahr). Da wir hier aber sicherstellen, dass 'uid'
|
||||||
|
// zwingend ein Integer (Convert.ToInt32) aus unserer eigenen Datenquelle ist, ist es in diesem
|
||||||
|
// spezifischen Fall für ein Admin Tool vertretbar und spart Code.
|
||||||
ExecuteSql($"DELETE FROM fluege WHERE Id={row["Id"]}");
|
ExecuteSql($"DELETE FROM fluege WHERE Id={row["Id"]}");
|
||||||
LoadFlights();
|
LoadFlights();
|
||||||
}
|
}
|
||||||
@@ -95,6 +101,10 @@ namespace SkyTeam
|
|||||||
cmd.Parameters.AddWithValue("@from", AddFromCombo.Text);
|
cmd.Parameters.AddWithValue("@from", AddFromCombo.Text);
|
||||||
cmd.Parameters.AddWithValue("@to", AddToCombo.Text);
|
cmd.Parameters.AddWithValue("@to", AddToCombo.Text);
|
||||||
cmd.Parameters.AddWithValue("@date", AddDatePick.SelectedDate.Value);
|
cmd.Parameters.AddWithValue("@date", AddDatePick.SelectedDate.Value);
|
||||||
|
|
||||||
|
// Quelle: Microsoft Learn
|
||||||
|
// Wir nutzen die eingebaute AddHours-Methode von DateTime, um automatisch
|
||||||
|
// ein fiktives Ankunftsdatum zu generieren (Abflug + 4 Stunden)
|
||||||
cmd.Parameters.AddWithValue("@arr", AddDatePick.SelectedDate.Value.AddHours(4));
|
cmd.Parameters.AddWithValue("@arr", AddDatePick.SelectedDate.Value.AddHours(4));
|
||||||
cmd.Parameters.AddWithValue("@fnum", flightNum);
|
cmd.Parameters.AddWithValue("@fnum", flightNum);
|
||||||
cmd.Parameters.AddWithValue("@price", AddPriceTxt.Text);
|
cmd.Parameters.AddWithValue("@price", AddPriceTxt.Text);
|
||||||
@@ -116,11 +126,18 @@ namespace SkyTeam
|
|||||||
BindComboBox("SELECT Id, CONCAT(Vorname, ' ', Nachname) AS FullName FROM piloten WHERE IstVerfuegbar=1", PilotCombo, "FullName", "Id");
|
BindComboBox("SELECT Id, CONCAT(Vorname, ' ', Nachname) AS FullName FROM piloten WHERE IstVerfuegbar=1", PilotCombo, "FullName", "Id");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Quelle: AI Assistant (Gemini)
|
||||||
|
// Idee: DRY Prinzip (Don't Repeat Yourself) / Refactoring
|
||||||
|
// Die KI hat vorgeschlagen, die sehr repetitiven SQL-Verbindungs und Adapter Logiken
|
||||||
|
// in universelle Hilfsmethoden (BindGrid, BindComboBox, ExecuteSql) auszulagern.
|
||||||
|
// Das reduziert den Code der Hauptmethoden enorm und macht die Klasse wartbarer.
|
||||||
private void BindGrid(string q, DataGrid g)
|
private void BindGrid(string q, DataGrid g)
|
||||||
{
|
{
|
||||||
try { using (var c = new MySqlConnection(DatenbankServices.GetConnection())) { c.Open(); var a = new MySqlDataAdapter(q, c); var t = new DataTable(); a.Fill(t); g.ItemsSource = t.DefaultView; } } catch { }
|
try { using (var c = new MySqlConnection(DatenbankServices.GetConnection())) { c.Open(); var a = new MySqlDataAdapter(q, c); var t = new DataTable(); a.Fill(t); g.ItemsSource = t.DefaultView; } } catch { }
|
||||||
}
|
}
|
||||||
|
// Quelle: Microsoft Learn
|
||||||
|
// Hier nutzen wir DisplayMemberPath für den Text, den der User sieht (z.B. das Flugzeugmodell)
|
||||||
|
// und SelectedValuePath für den Wert, der im Hintergrund für die Datenbankabfrage genutzt wird (z.B. die Id).
|
||||||
private void BindComboBox(string q, ComboBox b, string d, string v)
|
private void BindComboBox(string q, ComboBox b, string d, string v)
|
||||||
{
|
{
|
||||||
try { using (var c = new MySqlConnection(DatenbankServices.GetConnection())) { c.Open(); var a = new MySqlDataAdapter(q, c); var t = new DataTable(); a.Fill(t); b.ItemsSource = t.DefaultView; b.DisplayMemberPath = d; b.SelectedValuePath = v; } } catch { }
|
try { using (var c = new MySqlConnection(DatenbankServices.GetConnection())) { c.Open(); var a = new MySqlDataAdapter(q, c); var t = new DataTable(); a.Fill(t); b.ItemsSource = t.DefaultView; b.DisplayMemberPath = d; b.SelectedValuePath = v; } } catch { }
|
||||||
|
|||||||
Reference in New Issue
Block a user