Browse Source

Исправлены ошибки подключения к БД и перезагрузки комманд

Вадим Королёв 1 year ago
parent
commit
a4bad4c890

+ 3 - 3
InvestTracker/Entities/InvestContext.cs

@@ -22,9 +22,9 @@ public partial class InvestContext : DbContext
     protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
     {
         try {
-            return optionsBuilder.UseSqlServer("Data Source=srv-wsr\\is3;Initial Catalog=invest;User ID=user12;Password=user12;Encrypt=False");
-        } catch (Exception ex) {
-            return optionsBuilder.UseSqlServer("Data Source=vpmt.ru\\is3;Initial Catalog=invest;User ID=user12;Password=user12;Encrypt=False");
+            optionsBuilder.UseSqlServer("Data Source=srv-wsr\\is3;Initial Catalog=invest;User ID=user12;Password=user12;Encrypt=False");
+        } catch {
+            optionsBuilder.UseSqlServer("Data Source=vpmt.ru\\is3;Initial Catalog=invest;User ID=user12;Password=user12;Encrypt=False");
         }
     }
 

+ 47 - 4
InvestTracker/VM/EmployeeBrowseVM.cs

@@ -51,7 +51,7 @@ namespace InvestTracker.VM
         /// <summary>
         /// Выбранный на данный момент сотрудник
         /// </summary>
-        public Employee SelectedEmployee { get; set; }
+        public Employee? SelectedEmployee { get; set; }
 
         public EmployeeBrowseVM()
         {
@@ -76,6 +76,7 @@ namespace InvestTracker.VM
         {
             MessageBox.Show("Undoing");
             isDirty = true;
+            ReEvaluateCommands();
         }
 
         /// <summary>
@@ -83,9 +84,24 @@ namespace InvestTracker.VM
         /// </summary>
         private void Save_Executed()
         {
-            _dbContext.SaveChanges();
+            try
+            {
+                _dbContext.SaveChanges();
+            } catch (DbUpdateException ex)
+            {
+                string message = "Введённые данные о сотруднике не верны.";
+                if (ex.InnerException != null)
+                {
+                    message += "\r\n" + ex.InnerException.Message;
+                }
+                MessageBox.Show(message);
+            }
+            
             GridBlocked = true;
             isDirty = false;
+
+            RaisePropertyChanged(nameof(GridBlocked));
+            ReEvaluateCommands();
         }
         
         /// <summary>
@@ -93,9 +109,15 @@ namespace InvestTracker.VM
         /// </summary>
         private void New_Executed()
         {
-            Employee newEmployee = _dbContext.Employee.Create();
+            Employee newEmployee = new Employee();
+            _dbContext.Attach(newEmployee);
+            Employees.Add(newEmployee);
+
             GridBlocked = false;
             isDirty = true;
+
+            RaisePropertyChanged(nameof(GridBlocked));
+            ReEvaluateCommands();
         }
         
         /// <summary>
@@ -105,6 +127,9 @@ namespace InvestTracker.VM
         {
             GridBlocked = false;
             isDirty = true;
+
+            RaisePropertyChanged(nameof(GridBlocked));
+            ReEvaluateCommands();
         }
         
         /// <summary>
@@ -121,14 +146,18 @@ namespace InvestTracker.VM
 
                 if (result == MessageBoxResult.OK)
                 {
-                    _dbContext.DeleteObject(SelectedEmployee);
+                    _dbContext.Employees.Remove(SelectedEmployee);
                     _dbContext.SaveChanges();
+                    Employees.Remove(SelectedEmployee);
                 } else
                 {
                     MessageBox.Show("Не выбрана строка для удаления");
                 }
             }
             isDirty = true;
+            RaisePropertyChanged(nameof(isDirty));
+            RaisePropertyChanged(nameof(SelectedEmployee));
+            ReEvaluateCommands();
         }
         
         /// <summary>
@@ -137,6 +166,7 @@ namespace InvestTracker.VM
         private void Find_Executed()
         {
             MessageBox.Show("Searching...");
+            ReEvaluateCommands();
         }
         
         /// <summary>
@@ -167,5 +197,18 @@ namespace InvestTracker.VM
                 return false;
             }
         }
+
+        /// <summary>
+        /// Заставляет все команды вызвать свои методы .RaiseExecuteChanged
+        /// </summary>
+        private void ReEvaluateCommands()
+        {
+            UndoCommand.RaiseCanExecuteChanged();
+            SaveCommand.RaiseCanExecuteChanged();
+            NewCommand.RaiseCanExecuteChanged();
+            EditCommand.RaiseCanExecuteChanged();
+            DeleteCommand.RaiseCanExecuteChanged();
+            FindCommand.RaiseCanExecuteChanged();
+        }
     }
 }

+ 2 - 1
InvestTracker/Views/EmployeeBrowseView.xaml

@@ -3,8 +3,9 @@
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+      xmlns:vm="clr-namespace:InvestTracker.VM"
       xmlns:local="clr-namespace:InvestTracker.Views"
-      xmlns:model="clr-namespace:InvestTracker.Models" xmlns:vm="clr-namespace:InvestTracker.VM" d:DataContext="{d:DesignInstance Type=vm:EmployeeBrowseVM}"
+      xmlns:model="clr-namespace:InvestTracker.Entities"
       mc:Ignorable="d" 
       d:DesignHeight="450" d:DesignWidth="800"
       x:Name="EPage"