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


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

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

        <TextBlock Text="Список клиентов"
                   FontSize="22"
                   FontWeight="Bold"
                   Margin="0,0,0,15"/>

        <DataGrid x:Name="ClientsGrid"
                  Grid.Row="1"
                  AutoGenerateColumns="False"
                  IsReadOnly="True"
                  CanUserAddRows="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Binding="{Binding ClientID}" Width="80"/>
                <DataGridTextColumn Header="ФИО" Binding="{Binding FullName}" Width="*"/>
                <DataGridTextColumn Header="Телефон" Binding="{Binding Phone}" Width="160"/>
                <DataGridTextColumn Header="Дата рождения" Binding="{Binding BirthDate, StringFormat=dd.MM.yyyy}" Width="150"/>
                <DataGridTextColumn Header="Номер абонемента" Binding="{Binding MembershipNumber}" Width="170"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Page>






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

namespace primeapp.Pages
{
    public partial class ClientsPage : Page
    {
        public ClientsPage()
        {
            InitializeComponent();
            ClientsGrid.ItemsSource = ConnectToDb.conDb.Clients.ToList();
        }
    }
}








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

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

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

        <DataGrid x:Name="TrainersGrid"
                  Grid.Row="1"
                  AutoGenerateColumns="False"
                  IsReadOnly="True"
                  CanUserAddRows="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Binding="{Binding TrainerID}" Width="80"/>
                <DataGridTextColumn Header="ФИО" Binding="{Binding FullName}" Width="*"/>
                <DataGridTextColumn Header="Специализация" Binding="{Binding Specialization}" Width="220"/>
                <DataGridTextColumn Header="Телефон" Binding="{Binding Phone}" Width="160"/>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Page>






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

namespace primeapp.Pages
{
    public partial class TrainersPage : Page
    {
        public TrainersPage()
        {
            InitializeComponent();
            TrainersGrid.ItemsSource = ConnectToDb.conDb.Trainers.ToList();
        }
    }
}









<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="180"/>
                    <ColumnDefinition Width="250"/>
                </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"/>

                <Button Grid.Row="4"
                        Grid.Column="3"
                        Content="Записать"
                        Width="130"
                        Height="35"
                        HorizontalAlignment="Left"
                        Click="AddBookingBtn_Click"/>
            </Grid>
        </Border>

        <DataGrid x:Name="BookingGrid"
                  Grid.Row="2"
                  AutoGenerateColumns="False"
                  IsReadOnly="True"
                  CanUserAddRows="False">
            <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
    {
        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 AddBookingBtn_Click(object sender, RoutedEventArgs e)
        {
            if (ClientCb.SelectedValue == null ||
                TrainerCb.SelectedValue == null ||
                TrainingDateDp.SelectedDate == null ||
                string.IsNullOrWhiteSpace(TimeTb.Text))
            {
                MessageBox.Show("Заполните все обязательные поля", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning);
                return;
            }

            TimeSpan parsedTime;
            if (!TimeSpan.TryParse(TimeTb.Text.Trim(), out parsedTime))
            {
                MessageBox.Show("Введите время в формате ЧЧ:ММ", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning);
                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("Клиент успешно записан на тренировку", "Успех", MessageBoxButton.OK, MessageBoxImage.Information);

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

            LoadData();
        }
    }
}