Практическое занятие № 27
Тема: Редактирование данных в WPF
Цель работы: научится реализовать обработку событий пользовательского интерфейса.
Приобретаемые умения и навыки: умение понимать структуру WPF-приложений и их компоненты.
Норма времени: 2 часа.
Оборудование: Компьютер с установленным программным обеспечением и подключенный к Internet.
Методические указания по выполнению практической работы
Сделать базу данных «DemoEXZ». Создать в ней таблицу, назвать ее нужно «User».
Таблица «Task»
Не забываем про первичные ключи!
Для заполнения таблицы нажимаем изменить первые 200 строк:
Сделать схему к базе данных:
Рисунок – Схема базы данных
СОЗДАНИЕ ПРОЕКТА
Запустите Visual Studio 2022, перейдите File – Project.
Выберите Visual C#– WPF App, укажите имя проекта.
После нажатия кнопки «OK» создастся проект с пустой формой.
Создаём 2 страницы:
Производим подключения базы данных, для этому подключаем модель
Переходим в SQL Server находим название соединения.
Находим свою БД
Открываем Model.Context.cs:
Делаем подключение БД к приложению:
//------------------------------------------------------------------------------
// auto-generated
// Этот код создан по шаблону.
//
// Изменения, вносимые в этот файл вручную, могут привести к непредвиденной работе приложения.
// Изменения, вносимые в этот файл вручную, будут перезаписаны при повторном создании кода.
//
//------------------------------------------------------------------------------
namespace DemoEXZWPF
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class DemoEXZEntities : DbContext
{
private static DemoEXZEntities _instance;
public DemoEXZEntities()
: base("name=DemoEXZEntities")
{
}
public static DemoEXZEntities Instance()
{
if (_instance == null)
_instance = new DemoEXZEntities();
return _instance;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet Task { get; set; }
public virtual DbSet User { get; set; }
}
}
Разметка MainWindow.xaml:
Grid
Grid.RowDefinitions
RowDefinition Height="145*"/
RowDefinition Height="55*"/
RowDefinition Height="234*"/
Grid.RowDefinitions
TextBox Grid.Row ="0" HorizontalAlignment="Center" TextWrapping="Wrap" Name = "TextBox1" Text="" VerticalAlignment="Top" Width="120" Margin="0,117,0,0" Height="18"/
TextBox Grid.Row ="1" HorizontalAlignment="Center" TextWrapping="Wrap" Name = "TextBox2" Text="" VerticalAlignment="Top" Width="120" Margin="0,10,0,0" Height="18"/
Button Grid.Row ="2" Content="Войти" HorizontalAlignment="Center" VerticalAlignment="Top" Width="120" Click="Button_Click" Height="20"/
Обработчик на кнопку Войти
Разметка ListWindow.xaml:
В этой разметки прописать IsVisibleChanged="Window_IsVisibleChanged"
Grid
Grid.RowDefinitions
RowDefinition Height="10*"/
RowDefinition Height="*"/
RowDefinition Height="*"/
Grid.RowDefinitions
DataGrid x:Name="DGridTasks" AutoGenerateColumns="False" IsReadOnly="True" SelectionChanged="DGridTasks_SelectionChanged"
DataGrid.Columns
DataGridTextColumn Header="Название" Binding="{Binding name}"DataGridTextColumn
DataGridTextColumn Header="Описание" Binding="{Binding description}"DataGridTextColumn
DataGridTextColumn Header="Пользователь" Binding="{Binding User.name}"DataGridTextColumn
DataGridTemplateColumn
DataGridTemplateColumn.CellTemplate
DataTemplate
Button Content="Редактировать" Name="BtnEdit" Click="BtnEdit_Click"Button
DataTemplate
DataGridTemplateColumn.CellTemplate
DataGridTemplateColumn
DataGrid.Columns
DataGrid
Button Content="Добавить" HorizontalAlignment="Left" Grid.Row="2" Width="400" Name="BtnAdd" Click="BtnAdd_Click"/
Button Content="Удалить" HorizontalAlignment="Right" Grid.Row="2" Width="400" Name="BtnDelete" Click="BtnDelete_Click"/
TextBox x:Name="SearchBox" HorizontalAlignment="Left" Grid.Row="1" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="120" TextChanged="TextBox_TextChanged"/
ComboBox SelectedValue="{Binding user_id}" x:Name="ComboUser" SelectionChanged="ComboUser_SelectionChanged" DisplayMemberPath="name" SelectedValuePath="id" HorizontalAlignment="Right" Grid.Row="1" VerticalAlignment="Top" Width="120"/
Обработчики ListWindow.xaml.сs:
Заполнение ComboBox
Обработчик на кнопку Редактировать
Обработчик на кнопку Добавить
Обработчик на кнопку Удалить
Обработчик для вывода таблицы
Обработчик на TextBox «Поиск»
Обработчик на ComboBox «Фильтрация»
Разметка AddEditPage.xaml:
Grid
Grid.ColumnDefinitions
ColumnDefinition Width="*"/
ColumnDefinition Width="*"/
Grid.ColumnDefinitions
Grid.RowDefinitions
RowDefinition Height="*"/
RowDefinition Height="*"/
RowDefinition Height="*"/
RowDefinition Height="*"/
Grid.RowDefinitions
TextBlock HorizontalAlignment="Left" TextWrapping="Wrap" Text="Название" VerticalAlignment="Center"/
TextBlock HorizontalAlignment="Left" Grid.Row="1" TextWrapping="Wrap" Text="Пользователь" VerticalAlignment="Center"/
TextBlock HorizontalAlignment="Left" Grid.Row="2" TextWrapping="Wrap" Text="Описание" VerticalAlignment="Center"/
TextBox Grid.Column="1" HorizontalAlignment="Center" TextWrapping="Wrap" Text="{Binding name}" VerticalAlignment="Center" Width="170" Height="90"/
TextBox Grid.Column="1" HorizontalAlignment="Center" Grid.Row="2" TextWrapping="Wrap" Text="{Binding description}" VerticalAlignment="Center" Width="170" Height="57"/
ComboBox SelectedValue="{Binding user_id}" Grid.Column="1" HorizontalAlignment="Center" Grid.Row="1" VerticalAlignment="Center" Width="120" x:Name="ComboUser" DisplayMemberPath="name" SelectedValuePath="id"/
Button Content="Сохранить" HorizontalAlignment="Center" Grid.Row="3" Grid.ColumnSpan="2" VerticalAlignment="Center" Name="BtnSave" Click="BtnSave_Click"/
Обработчики AddEditPage.xaml.сs:
Обработчик на кнопку Сохранить
Контрольные вопросы:
Какие существуют программы для создания баз данных?
Чем отличается физическая схема базы данных от логической схемы?