Поделиться через


Передача данных между формами

Замечание

Классы DataSet и связанные классы являются устаревшими технологиями .NET Framework с начала 2000-х годов, которые позволяют приложениям работать с данными в памяти, пока приложения отключены от базы данных. Технологии особенно полезны для приложений, которые позволяют пользователям изменять данные и сохранять изменения обратно в базу данных. Хотя наборы данных являются проверенными успешными технологиями, рекомендуемый подход для новых приложений .NET заключается в использовании Entity Framework Core. Entity Framework предоставляет более естественный способ работы с табличными данными в виде объектных моделей и имеет более простой интерфейс программирования.

В этом руководстве приведены пошаговые инструкции по передаче данных из одной формы в другую. Используя таблицы "Клиенты и заказы" из образца базы данных Northwind, одна форма позволяет пользователям выбирать клиента, а вторая форма отображает выбранные заказы клиента. В этом руководстве показано, как создать метод во второй форме, которая получает данные из первой формы.

В этом руководстве вы выполните следующие задачи:

  • Создайте новый проект приложения Windows Forms (.NET Framework).
  • Создайте и настройте набор данных с помощью мастера настройки источника данных.
  • Выберите элемент управления, который нужно создать в форме при перетаскивании элементов из окна источников данных . Дополнительные сведения см. в разделе "Настройка элемента управления для создания при перетаскивании из окна источников данных".
  • Создайте элемент управления с привязкой к данным, перетащив элементы из окна источников данных в форму.
  • Создайте вторую форму с сеткой, отображающей данные.
  • TableAdapter Создайте запрос для получения заказов для конкретного клиента.
  • Передача данных между формами.

Замечание

В этом руководстве демонстрируется только один способ передачи данных между формами. Существуют другие варианты передачи данных в форму, например создание второго конструктора для получения данных или создание общедоступного свойства, которое можно задать с данными из первой формы.

Предпосылки

  • Установленные в Visual Studio рабочие нагрузки для разработки настольных приложений .NET и хранения и обработки данных. Чтобы установить их, откройте Visual Studio Installer и выберите "Изменить" или " Дополнительно>изменить" рядом с версией Visual Studio, которую вы хотите использовать. Дополнительные сведения см. в разделе "Изменение Visual Studio".

  • SQL Server Express 2019 LocalDB, установленный либо с страницы загрузок SQL Server, либо через установщик Visual Studio в составе рабочей нагрузки хранилище и обработка данных.

  • Пример базы данных Northwind, созданный следующими шагами:

    1. В Visual Studio откройте окно обозревателя объектов SQL Server , выбрав его в меню "Вид ". Обозреватель объектов SQL Server устанавливается как часть рабочей нагрузки хранилища данных и обработки .

    2. Разверните узел SQL Server, щелкните правой кнопкой мыши экземпляр LocalDB и выберите Новый запрос, чтобы открыть окно редактора запросов.

    3. Скопируйте скрипт Northwind Transact-SQL в буфер обмена. Этот скрипт T-SQL создает базу данных Northwind и заполняет ее данными.

    4. Вставьте скрипт T-SQL в редактор запросов и нажмите кнопку "Выполнить " в верхней части окна, чтобы создать базу данных Northwind.

Создание проекта приложения Windows Forms

  1. В Visual Studio в меню "Файл " выберите "Создать>проект".

  2. Выберите C# или Visual Basic из раскрывающегося списка " Все языки ", Windows из раскрывающегося списка " Все платформы " и "Рабочий стол " из списка "Все типы проектов ".

  3. Выберите приложение Windows Forms (.NET Framework) из списка шаблонов проектов и нажмите кнопку "Далее".

  4. Назовите проект PassingDataBetweenForms, нажмите кнопку "Далее", а затем нажмите кнопку "Создать".

Проект PassingDataBetweenForms создается и добавляется в обозреватель решений. Представление конструктора Form1 отображается в редакторе.

Создание источника данных

  1. Откройте окно "Источники данных", выбрав "Проект>Добавить новый источник данных" в меню Visual Studio.

  2. В окне "Источники данных" выберите "Добавить новый источник данных ", чтобы запустить мастер настройки источника данных .

  3. На странице "Выбор типа источника данных " выберите "База данных" и нажмите кнопку "Далее".

  4. На странице "Выбор модели базы данных " убедитесь, что указан набор данных и нажмите кнопку "Далее".

  5. На странице Выбор подключения к данным, если подключение к образцу базы данных Northwind уже доступно, выберите его и перейдите к шагу Выбор объектов базы данных. В противном случае нажмите кнопку "Создать подключение".

  6. На экране выбора источника данных выберите файл базы данных Microsoft SQL Server и нажмите кнопку "Продолжить".

  7. На экране "Добавить подключение" выберите "Обзор", перейдите к файлу northwnd.mdf и нажмите кнопку "Открыть".

  8. Выберите проверку подлинности Windows или выберите проверку подлинности SQL Server и укажите имя пользователя и пароль для доступа к базе данных.

  9. Выберите "Проверить подключение", чтобы проверить подключение. После успешного завершения подключения нажмите кнопку "ОК".

  10. На странице выбора подключения к данным убедитесь, что файл базы данных появится и нажмите кнопку "Далее".

  11. Выберите Нет в ответ на вопрос Хотите ли вы скопировать файл в свой проект и изменить подключение?

  12. На странице "Сохранить строку подключения" на странице файла конфигурации приложения нажмите кнопку "Да". Присвойте подключению NorthwindConnectionString и нажмите кнопку "Далее".

  13. На странице "Выбор объектов базы данных " разверните узел "Таблицы ", выберите таблицы "Клиенты и заказы ", присвойте набору данных NorthwindDataSet и нажмите кнопку "Готово".

NorthwindDataSet добавляется в проект, а таблицы "Клиенты и заказы" отображаются в окне "Источники данных".

Заполнение первой формы

  • Чтобы создать сетку с привязкой к данным, перетащите узел Customers из окна источников данных в Form1.

    На форме DataGridView отображаются элемент управления BindingNavigator и панель инструментов для навигации по записям. Объект NorthwindDataSet, CustomersTableAdapter, BindingSource, и BindingNavigator отображаются в области компонентов.

Создание второй формы

Создайте вторую форму для передачи данных.

  1. В меню "Проект" выберите "Добавить форму" (Windows Forms).

  2. Оставьте имя формы 2 по умолчанию и нажмите кнопку "Добавить".

  3. Перетащите основной узел Orders из окна источников данных в Form2.

    На DataGridView отображаются BindingNavigator и полоса инструментов для навигации по записям. Объект NorthwindDataSet, CustomersTableAdapter, BindingSource, и BindingNavigator отображаются в области компонентов.

  4. Удалите OrdersBindingNavigator из области компонентов. BindingNavigator исчезает из Формы 2.

Добавьте запрос TableAdapter

TableAdapter Добавьте запрос в Form2, который загружает заказы для клиента, выбранного в Form1.

  1. Дважды щелкните файл NorthwindDataSet.xsd в обозревателе решений.

  2. Щелкните правой кнопкой мыши OrdersTableAdapter в таблице "Заказы " и выберите "Добавить>запрос".

  3. Оставьте параметр по умолчанию Использовать SQL инструкции и нажмите Далее.

  4. Оставьте параметр по умолчанию SELECT, который возвращает строки и нажмите кнопку "Далее".

  5. В какие данные должна загружать таблица, для возврата Orders, основываясь на CustomerID, добавьте условие WHERE в конец запроса. Окончательный запрос должен выглядеть примерно так, как показано в следующем коде:

    SELECT OrderID, CustomerID, OrderDate, RequiredDate, ShippedDate, ShipVia, Freight, ShipName, ShipAddress, ShipCity, ShipRegion, ShipPostalCode, ShipCountry
    FROM Orders
    WHERE CustomerID = @CustomerID
    

    Замечание

    Используйте правильный синтаксис параметров для базы данных. Например, в Microsoft Access предложение WHERE будет выглядеть следующим образом WHERE CustomerID = ?.

  6. Нажмите кнопку "Далее".

  7. На экране Выбор методов для создания выберите Заполнить DataTable и введите FillByCustomerID.

  8. Отмените выбор параметра Return a DataTable и нажмите кнопку "Готово".

Создайте метод в Form2 для передачи данных

  1. Щелкните правой кнопкой мыши в Form2 и выберите "Вид кода" , чтобы открыть код Form2 в редакторе.

  2. В коде Form2 удалите содержимое Form2_Load метода и добавьте следующий код после Form2_Load метода:

internal void LoadOrders(String CustomerID)
{
    ordersTableAdapter.FillByCustomerID(northwindDataSet.Orders, CustomerID);
}

Создание метода в Form1 для передачи данных и отображения Form2

  1. В представлении конструктора формы 1 щелкните правой кнопкой мыши сетку данных клиента и выберите пункт "Свойства".

  2. В окне "Свойства" выберите значок "События " на верхней панели инструментов.

  3. Дважды щелкните событие DoubleClick, чтобы открыть редактор кода.

  4. В редакторе кода обновите определение метода, чтобы соответствовать следующему образцу:

private void customersDataGridView_DoubleClick(object sender, EventArgs e)
{
    System.Data.DataRowView SelectedRowView;
    NorthwindDataSet.CustomersRow SelectedRow;

    SelectedRowView = (System.Data.DataRowView)customersBindingSource.Current;
    SelectedRow = (NorthwindDataSet.CustomersRow)SelectedRowView.Row;

    Form2 OrdersForm = new Form2();
    OrdersForm.LoadOrders(SelectedRow.CustomerID);
    OrdersForm.Show();
}

Запуск и тестирование приложения

  1. Нажмите клавишу F5 , чтобы запустить приложение.

  2. В приложении дважды щелкните запись клиента в Form1 , чтобы открыть Form2 с заказами этого клиента.

Дальнейшие шаги

В зависимости от требований приложения можно выполнить несколько шагов после передачи данных между формами. Некоторые улучшения, которые можно сделать в этом руководстве, включают: