Загрузка данных


<Page x:Class="primeapp.Pages.BookingPage"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="BookingPage">

    <Grid Margin="15">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <TextBlock Text="Запись на тренировку"
                   FontSize="22"
                   FontWeight="Bold"
                   Margin="0,0,0,15"/>

        <Border Grid.Row="1"
                BorderBrush="Gray"
                BorderThickness="1"
                Padding="10"
                Margin="0,0,0,15">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="180"/>
                    <ColumnDefinition Width="250"/>
                    <ColumnDefinition Width="30"/>
                    <ColumnDefinition Width="330"/>
                </Grid.ColumnDefinitions>

                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>

                <TextBlock Text="Клиент:"
                           VerticalAlignment="Center"
                           Margin="0,0,10,10"/>
                <ComboBox x:Name="ClientCb"
                          Grid.Column="1"
                          Height="28"
                          Margin="0,0,10,10"/>

                <TextBlock Grid.Row="1"
                           Text="Тренер:"
                           VerticalAlignment="Center"
                           Margin="0,0,10,10"/>
                <ComboBox x:Name="TrainerCb"
                          Grid.Row="1"
                          Grid.Column="1"
                          Height="28"
                          Margin="0,0,10,10"/>

                <TextBlock Grid.Row="2"
                           Text="Дата:"
                           VerticalAlignment="Center"
                           Margin="0,0,10,10"/>
                <DatePicker x:Name="TrainingDateDp"
                            Grid.Row="2"
                            Grid.Column="1"
                            Height="28"
                            Margin="0,0,10,10"/>

                <TextBlock Grid.Row="3"
                           Text="Время (чч:мм):"
                           VerticalAlignment="Center"
                           Margin="0,0,10,10"/>
                <TextBox x:Name="TimeTb"
                         Grid.Row="3"
                         Grid.Column="1"
                         Height="28"
                         Margin="0,0,10,10"/>

                <TextBlock Grid.Row="4"
                           Text="Комментарий:"
                           VerticalAlignment="Center"
                           Margin="0,0,10,0"/>
                <TextBox x:Name="CommentTb"
                         Grid.Row="4"
                         Grid.Column="1"
                         Height="28"
                         Margin="0,0,10,0"/>

                <StackPanel Grid.Row="4"
                            Grid.Column="3"
                            Orientation="Horizontal"
                            HorizontalAlignment="Left">
                    <Button Content="Добавить"
                            Width="95"
                            Height="35"
                            Margin="0,0,10,0"
                            Click="AddBookingBtn_Click"/>

                    <Button Content="Изменить"
                            Width="95"
                            Height="35"
                            Margin="0,0,10,0"
                            Click="EditBookingBtn_Click"/>

                    <Button Content="Удалить"
                            Width="95"
                            Height="35"
                            Click="DeleteBookingBtn_Click"/>
                </StackPanel>
            </Grid>
        </Border>

        <DataGrid x:Name="BookingGrid"
                  Grid.Row="2"
                  AutoGenerateColumns="False"
                  IsReadOnly="True"
                  CanUserAddRows="False"
                  SelectionChanged="BookingGrid_SelectionChanged">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID"
                                    Binding="{Binding BookingID}"
                                    Width="70"/>
                <DataGridTextColumn Header="Клиент ID"
                                    Binding="{Binding ClientID}"
                                    Width="100"/>
                <DataGridTextColumn Header="Тренер ID"
                                    Binding="{Binding TrainerID}"
                                    Width="100"/>
                <DataGridTextColumn Header="Дата"
                                    Binding="{Binding TrainingDate, StringFormat=dd.MM.yyyy}"
                                    Width="140"/>
                <DataGridTextColumn Header="Время"
                                    Binding="{Binding TrainingTime}"
                                    Width="120"/>
                <DataGridTextColumn Header="Комментарий"
                                    Binding="{Binding Comment}"
                                    Width="*"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Page>






using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using primeapp.Database;

namespace primeapp.Pages
{
    public partial class BookingPage : Page
    {
        private TrainingBookings selectedBooking = null;

        public BookingPage()
        {
            InitializeComponent();
            LoadData();
        }

        private void LoadData()
        {
            ClientCb.ItemsSource = ConnectToDb.conDb.Clients.ToList();
            ClientCb.DisplayMemberPath = "FullName";
            ClientCb.SelectedValuePath = "ClientID";

            TrainerCb.ItemsSource = ConnectToDb.conDb.Trainers.ToList();
            TrainerCb.DisplayMemberPath = "FullName";
            TrainerCb.SelectedValuePath = "TrainerID";

            BookingGrid.ItemsSource = ConnectToDb.conDb.TrainingBookings.ToList();
        }

        private void ClearFields()
        {
            selectedBooking = null;

            ClientCb.SelectedIndex = -1;
            TrainerCb.SelectedIndex = -1;
            TrainingDateDp.SelectedDate = null;
            TimeTb.Clear();
            CommentTb.Clear();
            BookingGrid.SelectedItem = null;
        }

        private bool ValidateFields(out TimeSpan parsedTime)
        {
            parsedTime = new TimeSpan();

            if (ClientCb.SelectedValue == null ||
                TrainerCb.SelectedValue == null ||
                TrainingDateDp.SelectedDate == null ||
                string.IsNullOrWhiteSpace(TimeTb.Text))
            {
                MessageBox.Show("Заполните все обязательные поля", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning);
                return false;
            }

            if (!TimeSpan.TryParse(TimeTb.Text.Trim(), out parsedTime))
            {
                MessageBox.Show("Введите время в формате ЧЧ:ММ", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning);
                return false;
            }

            return true;
        }

        private void AddBookingBtn_Click(object sender, RoutedEventArgs e)
        {
            TimeSpan parsedTime;
            if (!ValidateFields(out parsedTime))
                return;

            TrainingBookings booking = new TrainingBookings()
            {
                ClientID = (int)ClientCb.SelectedValue,
                TrainerID = (int)TrainerCb.SelectedValue,
                TrainingDate = TrainingDateDp.SelectedDate.Value,
                TrainingTime = parsedTime,
                Comment = string.IsNullOrWhiteSpace(CommentTb.Text) ? null : CommentTb.Text.Trim()
            };

            ConnectToDb.conDb.TrainingBookings.Add(booking);
            ConnectToDb.conDb.SaveChanges();

            MessageBox.Show("Запись успешно добавлена", "