Хелпикс

Главная

Контакты

Случайная статья





Работа с базой данных из оконного приложения



Работа с базой данных из оконного приложения

 

Автоматическое отображение данных

на объекты с помощью платформы

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();

   }



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.