You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
4.2 KiB
120 lines
4.2 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
|
|
namespace eCompanies
|
|
{
|
|
/// <summary>
|
|
/// Логика взаимодействия для MainWindow.xaml
|
|
/// </summary>
|
|
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<Company>;
|
|
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<Company>;
|
|
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<Company>)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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|