diff --git a/eCompanies/App.xaml.cs b/eCompanies/App.xaml.cs index 70a7436..90047dc 100644 --- a/eCompanies/App.xaml.cs +++ b/eCompanies/App.xaml.cs @@ -28,6 +28,7 @@ namespace eCompanies { using (var db = new CompaniesDBContext()) { + c.CompanyId = 0; db.Company.Add(c); db.SaveChanges(); } @@ -51,16 +52,23 @@ namespace eCompanies db.SaveChanges(); } } - - public static void removeCompany(List idList) + + public static void addUser(Users u) { using (var db = new CompaniesDBContext()) { - foreach (int id in idList) - { - var x = db.Company.Where(i => i.CompanyId.Equals(id)); - foreach (Company c in x) db.Company.Remove(c); - } + u.UserId = 0; + db.Users.Add(u); + db.SaveChanges(); + } + } + + public static void updateUser(int id) + { + using (var db = new CompaniesDBContext()) + { + var x = db.Users.Where(i => i.UserId.Equals(id)); + foreach (Users u in x) db.Users.Update(u); db.SaveChanges(); } } @@ -103,5 +111,7 @@ namespace eCompanies MessageBoxButton.YesNo); } + + } } diff --git a/eCompanies/MainWindow.xaml.cs b/eCompanies/MainWindow.xaml.cs index 2d4d2b9..e162c25 100644 --- a/eCompanies/MainWindow.xaml.cs +++ b/eCompanies/MainWindow.xaml.cs @@ -21,6 +21,12 @@ namespace eCompanies companyGrid.DataContext = App.getCompanies(); } + internal static void refreshDataGrid(DataGrid dg) + { + dg.CancelEdit(); + dg.Items.Refresh(); + } + private void updateCompanyItem(Company updatingCompany) { if (updatingCompany == null) return; @@ -28,8 +34,7 @@ namespace eCompanies for (int i = 0; i != c.Count(); i++) if (c[i].CompanyId.Equals(updatingCompany.CompanyId)) c[i] = updatingCompany; - companyGrid.Items.Refresh(); - + refreshDataGrid(companyGrid); } private void companyGrid_AddingNewItem(object sender, AddingNewItemEventArgs e) @@ -39,7 +44,7 @@ namespace eCompanies newItem.dataGridRowStatus = DataGridRowStatus.NEW; var c = ((DataGrid)sender).DataContext as ObservableCollection; if (c.Count != 0) - newItem.CompanyId = ++c[c.Count - 1].CompanyId; + newItem.CompanyId = c[c.Count - 1].CompanyId + 1; } private void companyGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e) @@ -61,9 +66,10 @@ namespace eCompanies private void RowDelete_Click(object sender, RoutedEventArgs e) { ((Company)companyGrid.SelectedItem).dataGridRowStatus = DataGridRowStatus.REMOVED; - companyGrid.Items.Refresh(); + refreshDataGrid(companyGrid); } + private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) { switch (App.saveResultsMsgBox()) @@ -79,10 +85,40 @@ namespace eCompanies case MessageBoxResult.No: return; case MessageBoxResult.Yes: e.Cancel = true; return; } + switch (c.dataGridRowStatus) + { + case DataGridRowStatus.REMOVED: + App.removeCompany(c.CompanyId); + break; + case DataGridRowStatus.NEW: + syncUsers(c); + App.addCompany(c); + break; + case DataGridRowStatus.UPDATED: + syncUsers(c); + App.updateCompany(c); + break; + } + } + } + + private void syncUsers(Company c) + { + foreach (Users u in c.Users) + { + switch (u.dataGridRowStatus) + { + case DataGridRowStatus.REMOVED: + App.removeUser(u.UserId); + break; + case DataGridRowStatus.NEW: + App.addUser(u); + break; + case DataGridRowStatus.UPDATED: + App.updateUser(u.UserId); + break; + } } - // нужно здесь обновить всех редактированных юзеров - // и добавить новых в базу данных - // TODO: переписать все обновления БД для [dataGridRowStatus] } } } diff --git a/eCompanies/UsersWindow.xaml.cs b/eCompanies/UsersWindow.xaml.cs index 01b9bcd..2caefe2 100644 --- a/eCompanies/UsersWindow.xaml.cs +++ b/eCompanies/UsersWindow.xaml.cs @@ -53,13 +53,14 @@ namespace eCompanies } currentCompany.ContractStatus = contractStatusComboBox.SelectedIndex; currentCompany.Name = companyNameBox.Text; + currentCompany.dataGridRowStatus = DataGridRowStatus.UPDATED; updateCompanyItem(currentCompany); } private void RowDelete_Click(object sender, RoutedEventArgs e) { ((Users)usersGrid.SelectedItem).dataGridRowStatus = DataGridRowStatus.REMOVED; - usersGrid.Items.Refresh(); + MainWindow.refreshDataGrid(usersGrid); } private void usersGrid_CellEditEnding(object sender, System.Windows.Controls.DataGridCellEditEndingEventArgs e) @@ -76,7 +77,7 @@ namespace eCompanies newItem.dataGridRowStatus = DataGridRowStatus.NEW; var c = ((DataGrid)sender).DataContext as ObservableCollection; if (c.Count != 0) - newItem.UserId = ++c[c.Count - 1].UserId; + newItem.UserId = c[c.Count - 1].UserId + 1; } } }