using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using System.Windows.Controls; namespace eCompanies { /// /// Логика взаимодействия для MainWindow.xaml /// public delegate void UpdateCompanyGridDelegate(Company updatingCompany); public partial class MainWindow : Window { UsersWindow usersWindowInstance = null; public MainWindow() { InitializeComponent(); companyGrid.DataContext = App.getCompanies(); } internal static void refreshDataGrid(DataGrid dg) { dg.CancelEdit(); dg.Items.Refresh(); } private void updateCompanyItem(Company updatingCompany) { if (updatingCompany == null) return; var c = ((DataGrid)companyGrid).DataContext as ObservableCollection; for (int i = 0; i != c.Count(); i++) if (c[i].CompanyId.Equals(updatingCompany.CompanyId)) c[i] = updatingCompany; refreshDataGrid(companyGrid); } private void companyGrid_AddingNewItem(object sender, AddingNewItemEventArgs e) { e.NewItem = new Company(); var newItem = e.NewItem as Company; newItem.dataGridRowStatus = DataGridRowStatus.NEW; var c = ((DataGrid)sender).DataContext as ObservableCollection; if (c.Count != 0) newItem.CompanyId = c[c.Count - 1].CompanyId + 1; } private void companyGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) { var context = e.Row.DataContext as Company; if (context.dataGridRowStatus != DataGridRowStatus.NEW) context.dataGridRowStatus = DataGridRowStatus.UPDATED; } private void RowEdit_Click(object sender, RoutedEventArgs e) { UpdateCompanyGridDelegate d = updateCompanyItem; Company company = (Company)companyGrid.CurrentItem; if (usersWindowInstance != null) usersWindowInstance.Close(); usersWindowInstance = new UsersWindow(company, d); usersWindowInstance.Show(); } private void RowDelete_Click(object sender, RoutedEventArgs e) { Company c = (Company)companyGrid.SelectedItem; c.dataGridRowStatus = DataGridRowStatus.REMOVED; refreshDataGrid(companyGrid); } private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { switch (App.saveResultsMsgBox()) { case MessageBoxResult.No: return; case MessageBoxResult.Cancel: e.Cancel = true; return; } foreach (Company c in (ObservableCollection)companyGrid.DataContext) { if ((c.Name == null) && (c.dataGridRowStatus != DataGridRowStatus.REMOVED)) switch (App.fieldHasNotFilled()) { case MessageBoxResult.No: return; case MessageBoxResult.Yes: e.Cancel = true; return; } switch (c.dataGridRowStatus) { case DataGridRowStatus.REMOVED: App.removeCompany(c.CompanyId); syncUsers(c); break; case DataGridRowStatus.NEW: App.addCompany(c); syncUsers(c); break; case DataGridRowStatus.UPDATED: App.updateCompany(c); syncUsers(c); break; } } } private void syncUsers(Company c) { foreach (Users u in c.Users) { switch (u.dataGridRowStatus) { case DataGridRowStatus.REMOVED: App.removeUser(u.UserId); break; } } } } }