git_bsmd/ENI2/Controls/PortAreaControl.xaml.cs
Daniel Schick 90a4915683 Refactoring PortArea:
- Hinzufügen eines Editors im Admin-Bereich
- Entfernen der PortArea Daten aus SQLite und den Zugriffsklassen
- Ersetzen aller Zugriffe durch Daten aus der DB (DBManagerAsync)
2026-02-19 10:42:36 +01:00

143 lines
4.8 KiB
C#

using bsmd.database;
using ENI2.Excel;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace ENI2.Controls
{
/// <summary>
/// Interaction logic for PortAreaControl.xaml
/// </summary>
public partial class PortAreaControl : UserControl
{
private readonly ObservableCollection<PortArea> _portAreas = new ObservableCollection<PortArea>();
public PortAreaControl()
{
InitializeComponent();
this.dataGridPortAreas.ItemsSource = _portAreas;
var view = CollectionViewSource.GetDefaultView(_portAreas);
view.SortDescriptions.Add(new SortDescription(nameof(PortArea.Locode), ListSortDirection.Ascending));
view.SortDescriptions.Add(new SortDescription(nameof(PortArea.Code), ListSortDirection.Ascending));
_ = LoadPortAreasAsync();
this.dataGridPortAreas.ContextMenu = new ContextMenu();
MenuItem addItem = new MenuItem
{
Header = Properties.Resources.textAdd,
Icon = new System.Windows.Controls.Image { Source = new System.Windows.Media.Imaging.BitmapImage(new Uri("pack://application:,,,/Resources/add.png")) }
};
addItem.Click += AddItem_Click;
this.dataGridPortAreas.ContextMenu.Items.Add(addItem);
MenuItem delItem = new MenuItem
{
Header = Properties.Resources.textDelete,
Icon = new System.Windows.Controls.Image { Source = new System.Windows.Media.Imaging.BitmapImage(new Uri("pack://application:,,,/Resources/delete.png")) }
};
delItem.Click += DelItem_Click;
this.dataGridPortAreas.ContextMenu.Items.Add(delItem);
}
private async Task LoadPortAreasAsync()
{
List<PortArea> items = await DBManagerAsync.LoadPortAreasAsync(true);
foreach (PortArea item in items)
{
_portAreas.Add(item);
}
}
private void buttonSave_Click(object sender, RoutedEventArgs e)
{
_ = SavePortAreasAsync();
}
private void buttonAdd_Click(object sender, RoutedEventArgs e)
{
AddNewPortArea();
}
private void buttonImport_Click(object sender, RoutedEventArgs e)
{
var imported = ExcelLocalImportHelper.ImportPortAreas();
foreach (var item in imported)
{
_portAreas.Add(item);
}
}
private void dataGridPortAreas_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (e.Row?.Item is PortArea portArea)
{
portArea.IsDirty = true;
}
}
private void AddItem_Click(object sender, RoutedEventArgs e)
{
AddNewPortArea();
}
private async void DelItem_Click(object sender, RoutedEventArgs e)
{
if (this.dataGridPortAreas.SelectedItems.Count > 0)
{
if (MessageBox.Show("Are you sure to delete the selected values?", Properties.Resources.textConfirmation, MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) ==
MessageBoxResult.Yes)
{
var selectedItems = new List<PortArea>();
foreach (PortArea item in this.dataGridPortAreas.SelectedItems)
selectedItems.Add(item);
foreach (PortArea item in selectedItems)
{
int result = await DBManagerAsync.DeleteAsync(item);
if (result == 1 || item.IsNew)
{
_portAreas.Remove(item);
}
}
}
}
}
private void AddNewPortArea()
{
var item = new PortArea
{
IsDirty = true
};
_portAreas.Add(item);
this.dataGridPortAreas.SelectedItem = item;
this.dataGridPortAreas.ScrollIntoView(item);
}
private async Task SavePortAreasAsync()
{
int totalSaves = 0;
foreach (PortArea item in _portAreas)
{
if (item.IsNew || item.IsDirty)
{
totalSaves += await DBManagerAsync.SaveAsync(item);
}
}
if (totalSaves > 0)
{
MessageBox.Show($"{totalSaves} port areas saved", "Success", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
}
}