Files
CineBook/Views/MovieListView.xaml.cs

121 lines
3.6 KiB
C#

using CineBook.Data;
using CineBook.Helpers;
using CineBook.Models;
using System.Windows;
using System.Windows.Controls;
namespace CineBook.Views;
public partial class MovieListView : UserControl
{
private readonly Repository _repo;
private Movie? _selected;
public MovieListView(Repository repo)
{
InitializeComponent();
_repo = repo;
// Nur Admins dürfen bearbeiten/löschen
if (!Session.IsAdmin)
{
BtnAdd.IsEnabled = false;
BtnAdd.Visibility = Visibility.Collapsed;
BtnDelete.Visibility = Visibility.Collapsed;
BtnEdit.Visibility = Visibility.Collapsed;
}
LoadMovies();
}
private void LoadMovies()
{
try
{
MoviesGrid.ItemsSource = _repo.GetMovies();
StatusText.Text = $"● {_repo.GetMovies().Count} Filme geladen.";
}
catch (System.Exception ex)
{
StatusText.Text = "⚠ Fehler: " + ex.Message;
}
}
private void GridSelectionChanged(object sender, SelectionChangedEventArgs e)
{
_selected = MoviesGrid.SelectedItem as Movie;
BtnEdit.IsEnabled = _selected != null && Session.IsAdmin;
BtnDelete.IsEnabled = _selected != null && Session.IsAdmin;
}
private void SearchChanged(object sender, TextChangedEventArgs e) { }
private void SearchClick(object sender, RoutedEventArgs e)
{
var term = SearchBox.Text.Trim();
if (string.IsNullOrEmpty(term)) { LoadMovies(); return; }
try { MoviesGrid.ItemsSource = _repo.SearchMovies(term); }
catch (System.Exception ex) { StatusText.Text = "⚠ " + ex.Message; }
}
private void LoadAllClick(object sender, RoutedEventArgs e)
{
SearchBox.Text = "";
LoadMovies();
}
private void AddClick(object sender, RoutedEventArgs e)
{
var dlg = new MovieEditDialog(null);
if (dlg.ShowDialog() == true && dlg.Result != null)
{
try
{
if (_repo.CreateMovie(dlg.Result))
LoadMovies();
else
MessageBox.Show("Fehler beim Speichern.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
catch (System.Exception ex)
{
MessageBox.Show("DB-Fehler: " + ex.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
private void EditClick(object sender, RoutedEventArgs e)
{
if (_selected == null) return;
var dlg = new MovieEditDialog(_selected);
if (dlg.ShowDialog() == true && dlg.Result != null)
{
try
{
if (_repo.UpdateMovie(dlg.Result))
LoadMovies();
}
catch (System.Exception ex)
{
MessageBox.Show("DB-Fehler: " + ex.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
private void DeleteClick(object sender, RoutedEventArgs e)
{
if (_selected == null) return;
var r = MessageBox.Show($"Film \"{_selected.Title}\" wirklich löschen?", "Bestätigung",
MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (r == MessageBoxResult.Yes)
{
try
{
_repo.DeleteMovie(_selected.MovieID);
LoadMovies();
}
catch (System.Exception ex)
{
MessageBox.Show("DB-Fehler: " + ex.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
}