Browse Source

Добавление данных в БД

lyudmila.archackowa 11 months ago
parent
commit
6e22321996

+ 3 - 1
AvaloniaApplicationBase/Models/CatBaseContext.cs

@@ -36,7 +36,9 @@ public partial class CatBaseContext : DbContext
             entity.ToTable("cat_table");
 
             entity.Property(e => e.Id).HasColumnName("id");
-            entity.Property(e => e.Date).HasColumnName("date");
+            entity.Property(e => e.Date)
+                .HasColumnType("timestamp without time zone")
+                .HasColumnName("date");
             entity.Property(e => e.Gender).HasColumnName("gender");
             entity.Property(e => e.Name)
                 .HasColumnType("character varying")

+ 2 - 1
AvaloniaApplicationBase/Models/CatTable.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using AvaloniaApplicationBase.Models;
 
 namespace AvaloniaApplicationBase.Models;
 
@@ -9,7 +10,7 @@ public partial class CatTable
 
     public string Name { get; set; } = null!;
 
-    public DateOnly Date { get; set; }
+    public DateTime Date { get; set; }
 
     public int Gender { get; set; }
 

+ 3 - 3
AvaloniaApplicationBase/Models/PartialCat.cs

@@ -8,17 +8,17 @@ namespace AvaloniaApplicationBase.Models
 {
     public partial class CatTable
     {
-        public string Traits // свойство, возвращающее список черт характера кота
+        public string TraitsCats // свойство, возвращающее список черт характера кота
         {
             get
             {
-                
+
                 string s = (TraitCatTables.Count == 0) ? "Черт нет  " : (TraitCatTables.Count == 1) ? "Черта кота: " : "Черты кота: ";
 
                 // цикл, который проходит по таблице TraitCatTables (с помощью свойства IdTraitNavigation, которое связывает данную таблицу с CatTable)
                 foreach (var item in TraitCatTables)
                 {
-                    s += item.IdTraitNavigation.Trait+", "; // добавление черты кота в строку
+                    s += item.IdTraitNavigation.Trait + ", "; // добавление черты кота в строку
                 }
                 return s[0..(s.Length - 2)];
             }

+ 71 - 0
AvaloniaApplicationBase/ViewModels/AddCatPageViewModel.cs

@@ -0,0 +1,71 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using AvaloniaApplicationBase.Models;
+using AvaloniaApplicationBase.Views;
+using ReactiveUI;
+
+namespace AvaloniaApplicationBase.ViewModels
+{
+    public class AddCatPageViewModel : ReactiveObject
+    {
+        string name = "";
+        DateTime date = DateTime.Now;
+        int gender = -1;
+        List<string> selectedTraits = new List<string>();
+
+        public string Name { get => name; set => name = value; }
+        public string Date { get => date.ToString(); set => date = DateTime.Parse(value); }
+        public int Gender { get => gender; set => gender = value; }
+
+        public List<string> NewTraits
+        {
+            get => MainWindowViewModel.myConnection.TraitTables.Select(x => x.Trait).ToList();
+        }
+        public List<string> SelectedTraits
+        {
+            get => selectedTraits;
+            set => this.RaiseAndSetIfChanged(ref selectedTraits, value);
+        }
+        public string SelectedTraitCat
+        {
+            get => null;
+            set
+            {
+                selectedTraits.Add(value);
+                SelectedTraits = new List<string>(selectedTraits);
+            }
+
+        }
+
+        public void addNewCat()
+        {
+            CatTable newCat = new CatTable()
+            {
+                Name = name,
+                Date = date,
+                Gender = gender + 1,
+            };
+            MainWindowViewModel.myConnection.CatTables.Add(newCat);
+            MainWindowViewModel.myConnection.SaveChanges();
+
+            foreach (string item in selectedTraits)
+            {
+                TraitTable tc = MainWindowViewModel.myConnection.TraitTables.FirstOrDefault(x => x.Trait == item);
+                if (tc != null)
+                {
+                    TraitCatTable traitCatTable = new TraitCatTable();
+                    traitCatTable.IdCat = newCat.Id;
+                    traitCatTable.IdTrait = tc.Id;
+                    MainWindowViewModel.myConnection.TraitCatTables.Add(traitCatTable);
+                }
+            }
+            MainWindowViewModel.myConnection.SaveChanges();            
+
+        }
+        
+        
+
+
+    }
+}

+ 11 - 0
AvaloniaApplicationBase/ViewModels/MainWindowViewModel.cs

@@ -29,5 +29,16 @@ namespace AvaloniaApplicationBase.ViewModels
             get => showCatsVM; 
             set => showCatsVM = value; 
         }
+        
+
+        AddCatPageViewModel addCatVM = new AddCatPageViewModel(); // объект для связи со страницей с добавлением кота
+        public AddCatPageViewModel AddCatVM { get => addCatVM; set => addCatVM = value; }   // свойсво для изменения выше созданной переменной
+
+        public void NewCatPage() // переход на страницу с добавлением нового кота
+        {
+            US = new AddCatPage();
+        }
+
+        
     }
 }

+ 26 - 0
AvaloniaApplicationBase/Views/AddCatPage.axaml

@@ -0,0 +1,26 @@
+<UserControl xmlns="https://github.com/avaloniaui"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+			 xmlns:vm="using:AvaloniaApplicationBase.ViewModels"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+             mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
+			 x:DataType="vm:MainWindowViewModel"
+             x:Class="AvaloniaApplicationBase.Views.AddCatPage">
+	<Grid>
+		<StackPanel>
+			<TextBlock>Введите имя кота</TextBlock>
+			<TextBox Text="{Binding AddCatVM.Name}"></TextBox>
+			<TextBlock>Выберите дату рождения</TextBlock>
+			<DatePicker SelectedDate="{Binding AddCatVM.Date}"></DatePicker>
+			<TextBlock>Выберите пол</TextBlock>
+			<ComboBox SelectedIndex="{Binding AddCatVM.Gender}">
+				<ComboBoxItem>Мужской</ComboBoxItem>
+				<ComboBoxItem>Женский</ComboBoxItem>
+			</ComboBox>
+			<TextBlock>Выберите черты характера кота</TextBlock>
+			<ListBox ItemsSource="{Binding AddCatVM.SelectedTraits}"></ListBox>
+			<ComboBox ItemsSource="{Binding AddCatVM.NewTraits}" SelectedValue="{Binding AddCatVM.SelectedTraitCat}"></ComboBox>
+			<Button Command="{Binding AddCatVM.addNewCat}">Добавить кота</Button>
+		</StackPanel>
+	</Grid>
+</UserControl>

+ 13 - 0
AvaloniaApplicationBase/Views/AddCatPage.axaml.cs

@@ -0,0 +1,13 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace AvaloniaApplicationBase.Views;
+
+public partial class AddCatPage : UserControl
+{
+    public AddCatPage()
+    {
+        InitializeComponent();
+    }
+}

+ 2 - 2
AvaloniaApplicationBase/Views/ShowCatsPage.axaml

@@ -9,7 +9,7 @@
              x:Class="AvaloniaApplicationBase.Views.ShowCatsPage">
 	
 	<Grid RowDefinitions="*,9*">
-		<Button Grid.Row="0">Добавить кота</Button>
+		<Button Grid.Row="0" Command="{Binding NewCatPage}">Добавить кота</Button>
 		<ListBox ItemsSource="{Binding ShowCatsVM.CT}" Grid.Row="1">
 			<ListBox.ItemTemplate>
 				<DataTemplate>
@@ -18,7 +18,7 @@
 								<TextBlock Text="{Binding Name}"></TextBlock>
 								<TextBlock Text="{Binding Date}"></TextBlock>
 								<TextBlock Text="{Binding GenderNavigation.Gender}"></TextBlock>
-								<TextBlock Text="{Binding Traits}"></TextBlock>
+								<TextBlock Text="{Binding TraitsCats}"></TextBlock>
 							</StackPanel>
 					</Border>
 				</DataTemplate>