Опубликован: 13.07.2010 | Уровень: специалист | Доступ: платный
Самостоятельная работа 6:

Элементы управления DataGrid и ComboBox в приложениях ADO.NET на C#

Наполнение новой формы элементами интерфейса пользователя

  • Введите из вкладки Windows Forms панели Toolbox элементы для отображения данных из источников данных, добавленных к форме ранее. Настройте интерфейсные элементы в соответствии с таблицей.
Элементы для отображения данных
Объект (+примечания) Свойство Значение
Label (идентификатор заказа) Text Order ID:
  TextAlign MiddleRight
Label (дата заказа) Text Order Date:
  TextAlign MiddleRight
Label (служащий) Text Employee:
  TextAlign MiddleRight
TextBox Name txtOrderID
  BorderStyle FixedSingle
  Text Пусто
Выбрать из списка

(DataBindings)/Text dsIndividualOrder - Orders.OrderID
DateTimePicker Format Short
Выбрать из списка (DataBindings)/Value dsIndividualOrder - Orders.OrderDate
ComboBox Name cboEnployees
Выбрать из списка (DataBindings)/SelectedValue dsIndividualOrder - Orders.EmployeeID
DataSource dsEmployees.Employees
  DisplayMember FullName
  ValueMember EmployeeID
DataGrid Name dgOrderDetails
  DataSource dsOrderDetails.Order_Details

Окончательный дизайн формы должен выглядеть так


  • Закрепите элементы формы от случайного смещения через меню Format оболочки командой Lock Controls


  • Перейдите в вызывающую форму в режиме Design и также замкните на ней все элементы.
  • Удерживая нажатой клавишу Schift, выделите элементы ComboBox, DataGrid на самой форме и элемент dsOrdersForCustomer в подвале формы. В панели свойств установите для этих элементов свойство Modifier в значение Public, чтобы сделать эти элементы доступными в классе второй формы


  • Введите в обработчик события Load второй формы, который мы создали ранее, следующий код
//***************************************************************
private void Child_Load(object sender, System.EventArgs e)
{
  existChild = this;
  
  // Загрузка данных из источников в отображающие элементы
  object obOrderID;
  // Заполнить набор данных из поставщика  
  this.odaEmployees.Fill(this.dsEmployees);
  
  // Получить из вызывающей формы значение поля OrderID,
  // выделенного в данный момент в ее элементе DataGrid
  obOrderID = WinADODataGrid.Parent.existParent
    .dsOrdersForCustomer.Orders.Rows
    [WinADODataGrid.Parent.existParent.dgOrders.CurrentCell.RowNumber]
    .ItemArray[0];// В первом столбце находится OrderID
  
  // Обновить заголовок формы, указав в нем 
  // заказчика и идентификатор заказа
  this.Text = "Заказ №" 
    + obOrderID.ToString() 
    + " для "
    + WinADODataGrid.Parent.existParent.cboCustomers.Text;
  
  // Присвоить значение OrderID параметру,
  // соответствующему заголовку заказа
  this.odaIndividualOrder.SelectCommand.Parameters[0].Value = obOrderID;
  
  // Заполнить набор данных,
  // который относится к заголовку заказа
  this.odaIndividualOrder.Fill(this.dsIndividualOrder);
  
  // Присвоить значение параметру, соответствующему
  // заголовку заказа, с учетом идентификатора заказа OrderID
  this.odaOrderDetails.SelectCommand.Parameters[0].Value = obOrderID;
  
  // Заполнить набор данных, который относится к детализации заказа
  this.odaOrderDetails.Fill(this.dsOrderDetails);
}
Листинг 6.8. Код загрузки данных во вторую форму

Обратите внимание, что для доступа к элементам первой формы мы используем длинные имена ( WinADODataGrid.Parent. ), включающие в себя пространство имен проекта и имя класса первой формы. Это необходимо потому, что имена классов нашего проекта Parent и Child выбраны не совсем удачно и пересекаются с именами свойств системных элементов. Имя пространства имен проекта оболочка формирует автоматически по имени проекта.

  • Постройте приложение и проверьте его работу. Результат должен быть примерно таким



Александр Очеретяный
Александр Очеретяный
Украина, Киев
Анастасия Балыбердина
Анастасия Балыбердина
Украина, Киев, НТУУ КПИ