Академический Документы
Профессиональный Документы
Культура Документы
CREATE TABLE CP
(
Id INT PRIMARY KEY,
ClientId INTEGER,
PostavId INTEGER,
FOREIGN KEY (ClientId) REFERENCES Client (Id),
FOREIGN KEY (PostavId) REFERENCES Postav (Id)
);
2
Рисунок 1 - Процесс подключения к БД
Подключим базу данных к проекту WPF.
3
Рисунок 3 - Модель добавлена
В файле Model1.tt произведём следующие замены:
Icollection на ObservableCollection
Первый HashSet на ObservableCollection
System.Collections.Generic на System.Collections.ObjectModel
Создание интерфейса:
Для создания интерфейса зададим в MainWindow.xaml элемент Frame
для отображения страниц и кнопки для переключения страниц - Приложение
А, Листинг А1.
4
Рисунок 3 - MainWindow
Для отображения таблиц создадим страницу ViewAll.xaml -
Приложение А, Листинг А3.
Рисунок 4 - ViewAll
При запуске MainWindow отображает в элементе Frame страницу
ViewAll. Также на данную страницу возвращает кнопка “Всё”.
5
Рисунок 5 - ViewAll в MainWindow (при запуске)
Для добавления данных Клиента используется страницу incertC -
приложение А - Листинг А5.
6
Рисунок 7 - Новые данные в БД
Для изменения или удаления данных клиента используется страница
editC - Приложение А, Листинг А7.
7
Рисунок 9 - Изменённые данные в editC
8
Рисунок 11 - Удалённые данные в editC
9
Рисунок 13 - incertP
Рисунок 14 - editP
Формы для Добавления и Изменения/Удаления Связи между Клиентом
и Поставщиком представлены на рисунках 13-14.
Программный код для данных форм представлен в Приложении А,
Листинг А13-А16.
10
Рисунок 15 - incertСP
Рисунок 16 - editСP
Вывод:
Произведено ознакомление с технологией WPF, освоены методов
работы с базой данных MSSQL Server посредствам ado net.
Создан интерфейса для базы данных с помощью WPF. Используя его
возможно: добавить, изменять и удалять данные таблиц базы данных.
11
12
ПРИЛОЖЕНИЕ А
Листинг А1 - MainWindow.xaml
<Window x:Class="Transp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio
n"
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:Transp"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid Margin="0,0,0,-6">
<Frame x:Name="Main" VerticalAlignment="Top" Height="392"
Background="white" NavigationUIVisibility="Hidden"/>
</Grid>
13
</Window>
Листинг А2 - MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Configuration;
using System.Data.OleDb;
namespace Transp
{
/// <summary>
/// Логика взаимодействия для MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Main.Content = new ViewAll();
14
{
Main.Content = new editCP();
}
}
}
Листинг А3 - ViewAll.xaml
<Page x:Class="Transp.ViewAll"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio
n"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-
compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Transp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="ViewAll">
<Grid>
<DataGrid x:Name="DG1" Margin="0,0,547,66"/>
<DataGrid x:Name="DG12" Margin="258,0,246,66"/>
<DataGrid x:Name="DG2" Margin="559,0,0,66"/>
</Grid>
</Page>
Листинг А4 - ViewAll.xaml.cs
15
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Configuration;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Runtime.Remoting.Messaging;
using System.Data;
namespace Transp
{
/// <summary>
/// Логика взаимодействия для ViewAll.xaml
/// </summary>
public partial class ViewAll : Page
{
public ViewAll()
{
InitializeComponent();
LoadGrid();
}
private void LoadGrid()
{
16
}
}
}
}
Листинг А5 - incertC.xaml
<Page x:Class="Transp.incertC"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio
n"
17
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-
compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Transp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="incertC">
<Grid>
<Label Content="Введите название
"
HorizontalAlignment="Left" Margin="134,92,0,0"
VerticalAlignment="Top"/>
<TextBox Name="txt" HorizontalAlignment="Left"
Margin="255,98,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
<Button Click="B_clck1" Content="Сохранить"
HorizontalAlignment="Left" Margin="400,96,0,0"
VerticalAlignment="Top"/>
<Label Content="Введите номер
"
HorizontalAlignment="Left" Margin="134,62,0,0"
VerticalAlignment="Top"/>
<TextBox x:Name="num" HorizontalAlignment="Left"
Margin="255,65,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
</Grid>
</Page>
Листинг А6 - incertC.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
18
using System.Configuration;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace Transp
{
/// <summary>
/// Логика взаимодействия для incert.xaml
/// </summary>
public partial class incertC : Page
{
public incertC()
{
InitializeComponent();
}
private void B_clck1 (object sender, RoutedEventArgs e)
{
if (a > 0)
{
MessageBox.Show("Запись добавлена");
}
}
}
}
Листинг А7 - editC.xaml
19
<Page x:Class="Transp.editC"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio
n"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-
compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Transp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="editC">
<Grid>
<Label Content="Введите название
"
HorizontalAlignment="Left" Margin="255,62,0,0"
VerticalAlignment="Top"/>
<TextBox Name="txt" HorizontalAlignment="Left"
Margin="255,98,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
<Button Click="B_clck1" Content="Сохранить"
HorizontalAlignment="Left" Margin="400,96,0,0"
VerticalAlignment="Top"/>
<Label Content="Выберите номер

"
HorizontalAlignment="Left" Margin="92,62,0,0"
VerticalAlignment="Top" Height="29"/>
<TextBox x:Name="num" HorizontalAlignment="Left"
Margin="92,96,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
<DataGrid x:Name="DG1" Margin="92,142,69,35"/>
<Button Click="B_clck2" Content="Удалить"
HorizontalAlignment="Left" Margin="669,99,0,0"
VerticalAlignment="Top"/>
</Grid>
</Page>
Листинг А8 - editC.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
20
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Configuration;
using System.Data.OleDb;
using System.Collections;
using System.Data.SqlTypes;
using System.Data;
using System.Data.SqlClient;
namespace Transp
{
/// <summary>
/// Логика взаимодействия для incert.xaml
/// </summary>
public partial class editC : Page
{
public editC()
{
InitializeComponent();
LoadGrid();
}
private void LoadGrid()
{
string connectionString = "Server=DESKTOP-8OI9IRR\\
MSSQLSERVER01;Database=MyDataBase1;Trusted_Connection = True;";
21
{
if (a > 0)
{
MessageBox.Show("Запись изменена");
}
}
LoadGrid();
}
private void B_clck2(object sender, RoutedEventArgs e)
{
if (a > 0)
{
MessageBox.Show("Запись удалена");
}
22
LoadGrid();
}
}
}
Листинг А9 - incertP.xaml
<Page x:Class="Transp.incertP"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio
n"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-
compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Transp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="incertP">
<Grid>
<Label Content="Введите название
"
HorizontalAlignment="Left" Margin="134,92,0,0"
VerticalAlignment="Top"/>
<TextBox Name="txt" HorizontalAlignment="Left"
Margin="255,98,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
<Button Click="B_clck1" Content="Сохранить"
HorizontalAlignment="Left" Margin="400,96,0,0"
VerticalAlignment="Top"/>
<Label Content="Введите номер
"
HorizontalAlignment="Left" Margin="134,62,0,0"
VerticalAlignment="Top"/>
<TextBox x:Name="num" HorizontalAlignment="Left"
Margin="255,65,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
</Grid>
</Page>
23
Листинг А10 - incertP.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Configuration;
using System.Data.OleDb;
using System.Data.SqlClient;
namespace Transp
{
/// <summary>
/// Логика взаимодействия для incert.xaml
/// </summary>
public partial class incertP : Page
{
public incertP()
{
InitializeComponent();
}
private void B_clck1 (object sender, RoutedEventArgs e)
{
string connectionString = "Server=DESKTOP-8OI9IRR\\
MSSQLSERVER01;Database=MyDataBase1;Trusted_Connection = True;";
string id = num.Text;
string textname = txt.Text;
string sqlExpression = $"insert into[Postav](id,
Name) Values ('{id}', '{textname}')";
if (a > 0)
{
24
MessageBox.Show("Запись добавлена");
}
}
}
}
}
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio
n"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-
compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Transp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="editP">
<Grid>
<Label Content="Введите название
"
HorizontalAlignment="Left" Margin="255,62,0,0"
VerticalAlignment="Top"/>
<TextBox Name="txt" HorizontalAlignment="Left"
Margin="255,98,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
<Button Click="B_clck1" Content="Сохранить"
HorizontalAlignment="Left" Margin="400,96,0,0"
VerticalAlignment="Top"/>
<Label Content="Выберите номер

"
HorizontalAlignment="Left" Margin="92,62,0,0"
VerticalAlignment="Top" Height="29"/>
<TextBox x:Name="num" HorizontalAlignment="Left"
Margin="92,96,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
<DataGrid x:Name="DG1" Margin="92,142,69,35"/>
<Button Click="B_clck2" Content="Удалить"
HorizontalAlignment="Left" Margin="667,96,0,0"
VerticalAlignment="Top"/>
</Grid>
25
</Page>
namespace Transp
{
/// <summary>
/// Логика взаимодействия для incert.xaml
/// </summary>
public partial class editP : Page
{
public editP()
{
InitializeComponent();
LoadGrid();
}
private void LoadGrid()
{
string connectionString = "Server=DESKTOP-8OI9IRR\\
MSSQLSERVER01;Database=MyDataBase1;Trusted_Connection = True;";
26
connection.Open();
if (a > 0)
{
MessageBox.Show("Запись изменена");
}
}
LoadGrid();
}
private void B_clck2(object sender, RoutedEventArgs e)
{
27
using (SqlConnection connection = new
SqlConnection(connectionString))
{
connection.Open();
if (a > 0)
{
MessageBox.Show("Запись удалена");
}
LoadGrid();
}
}
}
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio
n"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-
compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Transp"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="incertCP">
<Grid>
<Label Content="Введите номер клиента
"
HorizontalAlignment="Left" Margin="99,94,0,0"
VerticalAlignment="Top"/>
<TextBox Name="txt" HorizontalAlignment="Left"
Margin="297,98,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
<Button Click="B_clck1" Content="Сохранить"
HorizontalAlignment="Left" Margin="534,118,0,0"
VerticalAlignment="Top"/>
28
<TextBox x:Name="txt_2" HorizontalAlignment="Left"
Margin="297,145,0,0" TextWrapping="Wrap"
VerticalAlignment="Top" Width="120"/>
<Label Content="Введите номер поставщика
"
HorizontalAlignment="Left" Margin="99,141,0,0"
VerticalAlignment="Top"/>
<Label Content="Введите номер
"
HorizontalAlignment="Left" Margin="134,52,0,0"
VerticalAlignment="Top"/>
<TextBox x:Name="num" HorizontalAlignment="Left"
Margin="297,55,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
</Grid>
</Page>
namespace Transp
{
/// <summary>
/// Логика взаимодействия для incert.xaml
/// </summary>
public partial class incertCP : Page
{
public incertCP()
{
InitializeComponent();
}
private void B_clck1 (object sender, RoutedEventArgs e)
29
{
if (a > 0)
{
MessageBox.Show("Запись добавлена");
}
}
}
}
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentatio
n"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-
compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Transp"
30
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="editCP">
<Grid>
<Label Content="Номер клиента
"
HorizontalAlignment="Left" Margin="255,62,0,0"
VerticalAlignment="Top"/>
<TextBox Name="txt" HorizontalAlignment="Left"
Margin="255,98,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
<Button Click="B_clck1" Content="Сохранить"
HorizontalAlignment="Left" Margin="446,125,0,0"
VerticalAlignment="Top"/>
<Label Content="Выберите номер

"
HorizontalAlignment="Left" Margin="92,62,0,0"
VerticalAlignment="Top" Height="29"/>
<TextBox x:Name="num" HorizontalAlignment="Left"
Margin="92,96,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120"/>
<DataGrid x:Name="DG1" Margin="92,186,69,35"/>
<TextBox x:Name="txt_2" HorizontalAlignment="Left"
Margin="255,156,0,0" TextWrapping="Wrap"
VerticalAlignment="Top" Width="120"/>
<Label Content="Номер поставщика"
HorizontalAlignment="Left" Margin="255,125,0,0"
VerticalAlignment="Top"/>
<Button Click="B_clck2" Content="Удалить"
HorizontalAlignment="Left" Margin="121,145,0,0"
VerticalAlignment="Top"/>
</Grid>
</Page>
31
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Configuration;
using System.Data.OleDb;
using System.Collections;
using System.Data.SqlTypes;
using System.Data;
using System.Data.SqlClient;
namespace Transp
{
/// <summary>
/// Логика взаимодействия для incert.xaml
/// </summary>
public partial class editCP : Page
{
public editCP()
{
InitializeComponent();
LoadGrid();
}
private void LoadGrid()
{
string connectionString = "Server=DESKTOP-8OI9IRR\\
MSSQLSERVER01;Database=MyDataBase1;Trusted_Connection = True;";
32
string name = num.Text;
string textCname = txt.Text;
string textPname = txt_2.Text;
string sqlExpression = $"UPDATE CP SET ClientId =
('{textCname}'), PostavId = ('{textPname}') WHERE Id =
('{name}')";
if (a > 0)
{
MessageBox.Show("Запись изменена");
}
}
LoadGrid();
}
private void B_clck2(object sender, RoutedEventArgs e)
{
if (a > 0)
{
MessageBox.Show("Запись удалена");
}
LoadGrid();
33
}
}
}
34