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 { /// /// Interaction logic for PortAreaControl.xaml /// public partial class PortAreaControl : UserControl { private readonly ObservableCollection _portAreas = new ObservableCollection(); 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 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(); 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); } } } }