• Source
    1. /*
    2.  * Visit to: http://www.bravohex.com
    3.  */
    4.  
    5. using System;
    6. using System.Collections.Generic;
    7. using System.Collections.ObjectModel;
    8. using System.ComponentModel;
    9. using System.Data.SqlClient;
    10. using System.Linq;
    11. using System.Runtime.CompilerServices;
    12. using System.Windows;
    13. using System.Data.Entity;
    14. using WPF_CRUD_EFCodeFirst_Simple.Annotations;
    15. using WPF_CRUD_EFCodeFirst_Simple.Models;
    16.  
    17. namespace WPF_CRUD_EFCodeFirst_Simple
    18. {
    19. /// <summary>
    20. /// Interaction logic for MainWindow.xaml
    21. /// </summary>
    22. public partial class MainWindow : Window, INotifyPropertyChanged
    23. {
    24. public MainWindow()
    25. {
    26. InitializeComponent();
    27. DataContext = this;
    28. }
    29.  
    30. private readonly ManagerDbContext _context = new ManagerDbContext();
    31.  
    32. #region CRUD Implementing
    33.  
    34. private IEnumerable<Departments> _departmentses;
    35. public ObservableCollection<Departments> Departmentses
    36. {
    37. get
    38. {
    39. return
    40. new ObservableCollection<Departments>(_context.Departmentses);
    41. }
    42. set
    43. {
    44. _departmentses = value;
    45. OnPropertyChanged("Departmentses");
    46. }
    47. }
    48.  
    49. private IEnumerable<Employee> _employee;
    50.  
    51. public IEnumerable<Employee> Employees
    52. {
    53. get
    54. {
    55. return
    56. new ObservableCollection<Employee>(_context.Employees.Include(e => e.Departments));
    57. }
    58. set
    59. {
    60. _employee = value;
    61. OnPropertyChanged("Employees");
    62. }
    63. }
    64.  
    65. private Employee _currentSelectedEmployee;
    66. public Employee CurrentSelectedEmployee
    67. {
    68. get
    69. {
    70. return _currentSelectedEmployee;
    71. }
    72. set
    73. {
    74. _currentSelectedEmployee = value;
    75. OnPropertyChanged("CurrentSelectedEmployee");
    76. }
    77. }
    78.  
    79. private void AddNewEmployee(Employee employee)
    80. {
    81. _context.Employees.Add(employee);
    82. _context.SaveChanges();
    83. }
    84.  
    85. private void UpdateCurrentEmployee(Employee employee)
    86. {
    87. var employeeToUpdate = _context.Employees.SingleOrDefault
    88. (x => x.Id == employee.Id);
    89. if (employeeToUpdate != null)
    90. {
    91. employeeToUpdate.FirstName = employee.FirstName;
    92. employeeToUpdate.LastName = employee.LastName;
    93. employeeToUpdate.Birthday = employee.Birthday;
    94. employeeToUpdate.DepId = employee.DepId;
    95. }
    96. _context.SaveChanges();
    97. }
    98.  
    99. private void DeleteCurrentEmployee(Employee employee)
    100. {
    101. var employeeToDelete = _context.Employees.SingleOrDefault
    102. (x => x.Id == employee.Id);
    103. _context.Employees.Remove(employeeToDelete);
    104. _context.SaveChanges();
    105. }
    106. #endregion
    107.  
    108. #region INotifyPropertyChanged Implementing
    109.  
    110. public event PropertyChangedEventHandler PropertyChanged;
    111.  
    112. [NotifyPropertyChangedInvocator]
    113. protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    114. {
    115. PropertyChangedEventHandler handler = PropertyChanged;
    116. if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    117. }
    118.  
    119. #endregion
    120.  
    121. #region Event Handlers
    122.  
    123. private bool insert = false;
    124. /// <summary>
    125. /// Clear Form
    126. /// </summary>
    127. /// <param name="sender"></param>
    128. /// <param name="e"></param>
    129. private void BtnInsert_Click(object sender, RoutedEventArgs e)
    130. {
    131. try
    132. {
    133. if (DtpkBirthday.SelectedDate != null && CbbDepartment.SelectedValue != null)
    134. AddNewEmployee(new Employee
    135. {
    136. FirstName = TxtFirstName.Text,
    137. LastName = TxtLastName.Text,
    138. Birthday = (DateTime)DtpkBirthday.SelectedDate,
    139. DepId = (int)CbbDepartment.SelectedValue
    140. });
    141. DataGrid1.ItemsSource = Employees; // Refresh
    142. }
    143. catch (Exception ex)
    144. {
    145. MessageBox.Show(ex.Message);
    146. }
    147.  
    148. //TxtId.Clear();
    149. //TxtFirstName.Clear();
    150. //TxtLastName.Clear();
    151. //DtpkBirthday.SelectedDate = DateTime.Now;
    152. //CbbDepartment.ClearValue(ComboBox.SelectedItemProperty);
    153. }
    154.  
    155. /// <summary>
    156. /// Change a Employee Object
    157. /// </summary>
    158. /// <param name="sender"></param>
    159. /// <param name="e"></param>
    160. private void BtnEdit_Click(object sender, RoutedEventArgs e)
    161. {
    162. try
    163. {
    164. UpdateCurrentEmployee(CurrentSelectedEmployee);
    165. }
    166. catch (SqlException ex)
    167. {
    168. MessageBox.Show(ex.Message);
    169. }
    170. }
    171.  
    172. /// <summary>
    173. /// Delete Employee Object
    174. /// </summary>
    175. /// <param name="sender"></param>
    176. /// <param name="e"></param>
    177. private void BtnDelete_Click(object sender, RoutedEventArgs e)
    178. {
    179. 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);
    180. if (status == MessageBoxResult.No) return;
    181. //ELSE
    182. DeleteCurrentEmployee(CurrentSelectedEmployee);
    183. DataGrid1.ItemsSource = Employees; // Refresh
    184. }
    185.  
    186. /// <summary>
    187. /// Close Form
    188. /// </summary>
    189. /// <param name="sender"></param>
    190. /// <param name="e"></param>
    191. private void BtnExit_Click(object sender, RoutedEventArgs e)
    192. {
    193. Close();
    194. }
    195. #endregion
    196.  
    197.  
    198. }
    199. }
    200.