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


namespace Zadanie
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class user76_dbEntities : DbContext
    {
        private static user76_dbEntities _context;

        public user76_dbEntities()
            : base("name=user76_dbEntities")
        {
        }

        public static user76_dbEntities GetContext()
        {
            if (_context == null)
                _context = new user76_dbEntities();

            return _context;
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    }
}

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">

    <DockPanel>

        <!-- Верхняя часть: поля ввода -->
        <StackPanel DockPanel.Dock="Top"
                    Orientation="Horizontal"
                    HorizontalAlignment="Center"
                    Margin="10">

            <TextBox x:Name="txtFamilia"
                     Width="150"
                     Margin="5" />

            <TextBox x:Name="txtImya"
                     Width="150"
                     Margin="5" />

            <TextBox x:Name="txtOtchestvo"
                     Width="150"
                     Margin="5" />

        </StackPanel>

        <!-- Нижняя часть: кнопки -->
        <StackPanel DockPanel.Dock="Bottom"
                    Orientation="Horizontal"
                    HorizontalAlignment="Center"
                    Margin="10">

            <Button Content="Добавить"
                    Width="100"
                    Margin="5"
                    x:Name="BtnAdd"
                    Click="BtnAdd_Click" />

            <Button Content="Изменить"
                    Width="100"
                    Margin="5"
                    x:Name="BtnEdit"
                    Click="BtnEdit_Click" />

            <Button Content="Удалить"
                    Width="100"
                    Margin="5"
                    x:Name="BtnDelete"
                    Click="BtnDelete_Click" />

        </StackPanel>

        <!-- Центр: таблица -->
        <DataGrid x:Name="DataGridZadanie"
                  AutoGenerateColumns="False"
                  SelectionChanged="DataGridZadanie_SelectionChanged"
                  IsReadOnly="True"
                  SelectionMode="Single"
                  Margin="10">

            <DataGrid.Columns>

                <DataGridTextColumn Header="ID"
                                    Binding="{Binding Id}"
                                    Width="Auto" />

                <DataGridTextColumn Header="Фамилия"
                                    Binding="{Binding Familia}"
                                    Width="*" />

                <DataGridTextColumn Header="Имя"
                                    Binding="{Binding Imya}"
                                    Width="*" />

                <DataGridTextColumn Header="Отчество"
                                    Binding="{Binding Otchestvo}"
                                    Width="*" />

            </DataGrid.Columns>

        </DataGrid>

    </DockPanel>

</Window>

using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using Zadanie;

namespace WpfApp1
{
    /// <summary>
    /// Логика взаимодействия для MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        // Контекст базы данных
        private user76_dbEntities _context =
            user76_dbEntities.GetContext();

        public MainWindow()
        {
            InitializeComponent();
            LoadData(); // загружаем данные при старте
        }

        // Метод загрузки данных из таблицы БД
        private void LoadData()
        {
            try
            {
                DataGridZadanie.ItemsSource =
                    _context.Zadanie.ToList();
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    $"Ошибка загрузки данных:\n{ex.Message}");
            }
        }

        // Кнопка "Добавить"
        private void BtnAdd_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Проверка, что все поля заполнены
                if (string.IsNullOrWhiteSpace(txtFamilia.Text) ||
                    string.IsNullOrWhiteSpace(txtImya.Text) ||
                    string.IsNullOrWhiteSpace(txtOtchestvo.Text))
                {
                    MessageBox.Show(
                        "Заполните все поля перед добавлением!",
                        "Ошибка",
                        MessageBoxButton.OK,
                        MessageBoxImage.Warning);

                    return;
                }

                // Создаём новый объект
                var newZadanie = new Zadanie
                {
                    Familia = txtFamilia.Text,
                    Imya = txtImya.Text,
                    Otchestvo = txtOtchestvo.Text
                };

                // Добавляем в контекст и сохраняем в БД
                _context.Zadanie.Add(newZadanie);
                _context.SaveChanges();

                // Обновляем DataGrid
                LoadData();

                // Очищаем поля
                txtFamilia.Clear();
                txtImya.Clear();
                txtOtchestvo.Clear();

                MessageBox.Show(
                    "Запись успешно добавлена!",
                    "Успех",
                    MessageBoxButton.OK,
                    MessageBoxImage.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    $"Ошибка при добавлении записи:\n{ex.Message}",
                    "Ошибка",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error);
            }
        }

        // Вывод выбранной записи в TextBox
        private void DataGridZadanie_SelectionChanged(
            object sender,
            SelectionChangedEventArgs e)
        {
            // Получаем выбранный объект
            var selected =
                DataGridZadanie.SelectedItem as Zadanie;

            if (selected != null)
            {
                txtFamilia.Text = selected.Familia;
                txtImya.Text = selected.Imya;
                txtOtchestvo.Text = selected.Otchestvo;
            }
        }

        // Кнопка "Изменить"
        private void BtnEdit_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Проверяем, выбрана ли строка
                var selected =
                    DataGridZadanie.SelectedItem as Zadanie;

                if (selected == null)
                {
                    MessageBox.Show(
                        "Выберите запись для изменения.",
                        "Ошибка",
                        MessageBoxButton.OK,
                        MessageBoxImage.Warning);

                    return;
                }

                // Проверяем, что введены данные
                if (string.IsNullOrWhiteSpace(txtFamilia.Text) ||
                    string.IsNullOrWhiteSpace(txtImya.Text) ||
                    string.IsNullOrWhiteSpace(txtOtchestvo.Text))
                {
                    MessageBox.Show(
                        "Поля не могут быть пустыми!",
                        "Ошибка",
                        MessageBoxButton.OK,
                        MessageBoxImage.Warning);

                    return;
                }

                // Проверяем, изменил ли пользователь что-то
                bool changed =
                    txtFamilia.Text != selected.Familia ||
                    txtImya.Text != selected.Imya ||
                    txtOtchestvo.Text != selected.Otchestvo;

                if (!changed)
                {
                    MessageBox.Show(
                        "Вы не внесли изменений.",
                        "Информация",
                        MessageBoxButton.OK,
                        MessageBoxImage.Information);

                    return;
                }

                // Применяем изменения
                selected.Familia = txtFamilia.Text;
                selected.Imya = txtImya.Text;
                selected.Otchestvo = txtOtchestvo.Text;

                // Сохраняем изменения в БД
                _context.SaveChanges();

                // Обновляем DataGrid
                LoadData();

                txtFamilia.Clear();
                txtImya.Clear();
                txtOtchestvo.Clear();

                MessageBox.Show(
                    "Запись успешно изменена!",
                    "Успех",
                    MessageBoxButton.OK,
                    MessageBoxImage.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    $"Ошибка при изменении записи:\n{ex.Message}",
                    "Ошибка",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error);
            }
        }

        // Кнопка "Удалить"
        private void BtnDelete_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                // Получаем выбранный объект
                var selected =
                    DataGridZadanie.SelectedItem as Zadanie;

                if (selected == null)
                {
                    MessageBox.Show(
                        "Выберите запись для удаления.",
                        "Ошибка",
                        MessageBoxButton.OK,
                        MessageBoxImage.Warning);

                    return;
                }

                // Подтверждение удаления
                var result = MessageBox.Show(
                    $"Вы уверены, что хотите удалить запись: " +
                    $"{selected.Familia} {selected.Imya} {selected.Otchestvo}?",
                    "Подтверждение удаления",
                    MessageBoxButton.YesNo,
                    MessageBoxImage.Question);

                if (result == MessageBoxResult.Yes)
                {
                    // Удаляем запись из контекста
                    _context.Zadanie.Remove(selected);
                    _context.SaveChanges();

                    // Обновляем DataGrid
                    LoadData();

                    // Очищаем текстбоксы
                    txtFamilia.Clear();
                    txtImya.Clear();
                    txtOtchestvo.Clear();

                    MessageBox.Show(
                        "Запись успешно удалена!",
                        "Успех",
                        MessageBoxButton.OK,
                        MessageBoxImage.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(
                    $"Ошибка при удалении записи:\n{ex.Message}",
                    "Ошибка",
                    MessageBoxButton.OK,
                    MessageBoxImage.Error);
            }
        }
    }
}