/*
* Visit to: http://www.bravohex.com
*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data.SqlClient;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Data.Entity;
using WPF_CRUD_EFCodeFirst_Simple.Annotations;
using WPF_CRUD_EFCodeFirst_Simple.Models;
namespace WPF_CRUD_EFCodeFirst_Simple
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
DataContext = this;
}
private readonly ManagerDbContext _context = new ManagerDbContext();
#region CRUD Implementing
private IEnumerable<Departments> _departmentses;
public ObservableCollection<Departments> Departmentses
{
get
{
return
new ObservableCollection<Departments>(_context.Departmentses);
}
set
{
_departmentses = value;
OnPropertyChanged("Departmentses");
}
}
private IEnumerable<Employee> _employee;
public IEnumerable<Employee> Employees
{
get
{
return
new ObservableCollection<Employee>(_context.Employees.Include(e => e.Departments));
}
set
{
_employee = value;
OnPropertyChanged("Employees");
}
}
private Employee _currentSelectedEmployee;
public Employee CurrentSelectedEmployee
{
get
{
return _currentSelectedEmployee;
}
set
{
_currentSelectedEmployee = value;
OnPropertyChanged("CurrentSelectedEmployee");
}
}
private void AddNewEmployee(Employee employee)
{
_context.Employees.Add(employee);
_context.SaveChanges();
}
private void UpdateCurrentEmployee(Employee employee)
{
var employeeToUpdate = _context.Employees.SingleOrDefault
(x => x.Id == employee.Id);
if (employeeToUpdate != null)
{
employeeToUpdate.FirstName = employee.FirstName;
employeeToUpdate.LastName = employee.LastName;
employeeToUpdate.Birthday = employee.Birthday;
employeeToUpdate.DepId = employee.DepId;
}
_context.SaveChanges();
}
private void DeleteCurrentEmployee(Employee employee)
{
var employeeToDelete = _context.Employees.SingleOrDefault
(x => x.Id == employee.Id);
_context.Employees.Remove(employeeToDelete);
_context.SaveChanges();
}
#endregion
#region INotifyPropertyChanged Implementing
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
#region Event Handlers
private bool insert = false;
/// <summary>
/// Clear Form
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnInsert_Click(object sender, RoutedEventArgs e)
{
try
{
if (DtpkBirthday.SelectedDate != null && CbbDepartment.SelectedValue != null)
AddNewEmployee(new Employee
{
FirstName = TxtFirstName.Text,
LastName = TxtLastName.Text,
Birthday = (DateTime)DtpkBirthday.SelectedDate,
DepId = (int)CbbDepartment.SelectedValue
});
DataGrid1.ItemsSource = Employees; // Refresh
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
//TxtId.Clear();
//TxtFirstName.Clear();
//TxtLastName.Clear();
//DtpkBirthday.SelectedDate = DateTime.Now;
//CbbDepartment.ClearValue(ComboBox.SelectedItemProperty);
}
/// <summary>
/// Change a Employee Object
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnEdit_Click(object sender, RoutedEventArgs e)
{
try
{
UpdateCurrentEmployee(CurrentSelectedEmployee);
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// Delete Employee Object
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnDelete_Click(object sender, RoutedEventArgs e)
{
var status = MessageBox.Show("Bạn có muốn xóa Nhân Viên này không?", "Cảnh Báo", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (status == MessageBoxResult.No) return;
//ELSE
DeleteCurrentEmployee(CurrentSelectedEmployee);
DataGrid1.ItemsSource = Employees; // Refresh
}
/// <summary>
/// Close Form
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnExit_Click(object sender, RoutedEventArgs e)
{
Close();
}
#endregion
}
}