|
|||
Работа с базой данных из оконного приложенияРабота с базой данных из оконного приложения
Автоматическое отображение данных на объекты с помощью платформы Entity Framework Задача. Вы хотите обращаться к базе данных при посредстве объектов платформы. NET, не создавая собственную библиотеку объектов данных. Решение. Воспользуйтесь платформой Entity Framework. Она позволяет автоматически отображать таблицы базы данных и их отношения на объекты, которые можно использовать в коде С#. По сути, Entity Framework является библиотекой объектно-реляционного сопоставления. Она создана корпорацией Microsoft и полностью интегрируется в Visual Studio. Чтобы создать объект для таблицы Tovar, выполните следующие шаги:
Создать проект → C# Приложение WPF (. NET Framework):
В Обозревателе решений щёлкнуть правой кнопкой мыши по названию проекта, выбрать Добавить, затем выбрать Создать элемент:
Из предложенного перечня элементов выбрать «Модель ADO. NET EDM» (Entity Data Model):
Версия 2010: Выбрать Создать из Базы данных: Версия 2019: Выбрать Конструктор EF из базы данных:
Если база данных уже создана, то выбрать её. (кн. Создать соединение -> обзор -> выбрать базу -> ОК)
Ввести параметр соединения сущности, убрав название базы данных из названия класса сущностей. Например, если база называется test. mdf, то будет предложено имя testEntities, лучше назвать просто Entities:
На вопрос о копировании файла в проект ответить Нет:
Выбрать версию Entity Framework (для версии 2019):
Отметить объекты базы данных для включения, задать Пространство имён модели:
На закладке Model1 отобразятся объекты базы данных (сущности), включённые в модель:
Добавить элемент управления ListBox для отображения в списке наименований товаров, переименуйте его в окне свойств: TovaryList.
Ввести в программный код выделенные в тексте строки:
using System; using System. Collections. Generic; using System. Linq; using System. Text; 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;
namespace WpfApplication1 { /// < summary> /// Логика взаимодействия для MainWindow. xaml /// < /summary> public partial class MainWindow: Window { Entities entities = new Entities(); public MainWindow() { InitializeComponent(); foreach (var tovar in entities. Tovar) TovaryList. Items. Add(tovar); } } }
Создать класс:
Ввести в программный код для отображения названий товаров в ListBox:
Такой же код добавить для всех сущностей (VidTovara). using System; using System. Collections. Generic; using System. Linq; using System. Text; using System. Threading. Tasks;
namespace WpfTest { public partial class Tovar { public override string ToString() { //return base. ToString(); return nazvanie; } } public partial class VidTovara { public override string ToString() { //return base. ToString(); return vid; } }
}
В результате выполнения программы в списке (ListBox) отразится перечень наименований товаров:
Добавляя на форму дополнительные элементы (текстовые поля, кнопки) и назначая им нужные действия, дополнить программу для добавления товаров в список, удаления из списка и т. д.
Добавить заполнение элемента ComboBox (Вид товара): comboBox_TypeOfTovar public partial class MainWindow: Window { Entities entities = new Entities(); public MainWindow() { InitializeComponent(); foreach (var tovar in entities. Tovar) TovaryList. Items. Add(tovar); foreach (var vid in entities. VidTovara) comboBox_TypeOfTovar. Items. Add(vid); } }
Дважны щёлкните по элементу TovaryList и введите программный код для отображения информации в TextBox (наименование товара) и ComboBox (соответствующего вида товара):
private void TovaryList_SelectionChanged(object sender, SelectionChangedEventArgs e) { // получает элемент в текущем выделении или null, если выделение пусто var selected_tovar = TovaryList. SelectedItem as Tovar;
if (selected_tovar! = null) { textBoxName. Text = selected_tovar. nazvanie; //comboBox_TypeOfTovar. SelectedIndex = selected_tovar. Vid - 1; comboBox_TypeOfTovar. SelectedItem = (from vid in entities. VidTovara where vid. Id == selected_tovar. vid select vid). Single< VidTovara> (); } else { textBoxName. Text = " "; comboBox_TypeOfTovar. SelectedIndex = -1; // выделение пусто } }
Программный код для удаления записи:
private void Delete_Click(object sender, RoutedEventArgs e) { // Добавить сообщение с предупреждением об удалении
var delete_tovar = TovaryList. SelectedItem as Tovar; if (delete_tovar! = null) { // Помечает данную сущность как Deleted. // При сохранении изменений данная сущность будет удалена entities. Tovar. Remove(delete_tovar); // 10: entities. DeleteObject(delete_tovar);
entities. SaveChanges(); // Сохраняет все изменения textBoxName. Clear();
// Удаляет ссылку указанного элемента из коллекции TovaryList. Items. Remove(delete_tovar);
comboBox_TypeOfTovar. SelectedIndex = -1; // выделение пусто
// Добавить сообщение об удалении записи
} else MessageBox. Show(" Нет удаляемых объектов! ", " Ошибка", MessageBoxButton. OK, MessageBoxImage. Warning); }
Программный код для сохранения записи:
private void Save_Click(object sender, RoutedEventArgs e) { // получает элемент в текущем выделении или null, если выделение пусто var tovar = TovaryList. SelectedItem as Tovar; if (textBoxName. Text == " " || comboBox_TypeOfTovar. SelectedIndex == -1) MessageBox. Show(" Заполните все поля! ", " Ошибка", MessageBoxButton. OK, MessageBoxImage. Error); else { if (tovar == null) { tovar = new Tovar(); // добавляет сущность (состояние Added), при сохранении изменений // сущности в состоянии Added вставляются в БД entities. Tovary. Add(tovar); // 10: entities. AddToTovari(add_tovar);
// добавляет элемент в коллекцию TovaryList. Items. Add(tovar); } tovar. nazvanie = textBoxName. Text; tovar. vid = (comboBox_TypeOfTovar. SelectedItem as VidTovara). Id; entities. SaveChanges(); TovaryList. Items. Refresh();
// Добавить сообщение о сохранении записи
} } Программный код для добавления записи:
private void New_Click(object sender, RoutedEventArgs e) { textBoxName. Text = " "; TovaryList. SelectedIndex = -1; comboBox_TypeOfTovar. SelectedIndex = -1; textBoxName. Focus(); }
Программный код для вызова нового окна:
private void VidTovara_Click(object sender, RoutedEventArgs e) { var window_ = new Window(); window_. ShowDialog(); }
|
|||
|