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

Упорядочивание списков и вычисляемые столбцы DataSet

Цель работы: Изучить основные приемы и способы сортировки данных при заполнении данными DataSet, динамическое изменение структуры DataSet, создание вычисляемых столбцов в DataSet и связывание их с элементами представления

Основные положения

В результате выполнения лабораторных работ 1 - 10 разработано приложение для учета сотрудников предприятия, основная экранная форма которого приведена на рисунке 11.1.

Экранная форма учета сотрудников предприятия

увеличить изображение
Рис. 11.1. Экранная форма учета сотрудников предприятия

При аттестации разработанного приложения конечными пользователями были сделаны следующие замечания:

  • список сотрудников необходимо упорядочить по алфавиту;
  • в списке сотрудников необходимо указывать фамилию, имя и отчество.

Упорядочение списка сотрудников по алфавиту

Данные о сотрудниках считываются из таблицы Employee базы данных с помощью SQL -запроса в объект класса DataSet, с которым связан элемент визуализации данных listBoxEmployee. Данные из таблицы Employee базы данных заполняют таблицу DataSetEmployee в той последовательности, как они записаны в базе данных и соответственно в той же последовательности и отображаются в элементе визуализации данных listBoxEmployee. Для упорядочения списка сотрудников по алфавиту достаточно упорядочить данные получаемые из базы данных с помощью SQL -запроса, т.е. необходимо модифицировать команду Select.

Для формирования новой команды Select необходимо переконфигурировать Data Adapter - daEmployee.

Конфигурирование Data Adapter

  1. В дизайнере класса DataSetEmployee выделите EmployeeTableAdapter (рисунок 11.2) и через контекстное меню откройте помощник конфигуратора адаптера Table Adapter Configuration Wizard (рисунок 11.3).
    Дизайнер класса DataSetEmployee

    увеличить изображение
    Рис. 11.2. Дизайнер класса DataSetEmployee
    Окно помощника конфигуратора адаптера

    Рис. 11.3. Окно помощника конфигуратора адаптера
  2. В окне Table Adapter Configuration Wizard нажмите кнопку Query Builder (рисунок 11.3) . В результате будет выведено окно Query Builder построителя SQL -запросов (рисунок 11.4).
    Окно Query Builder построителя SQL-запросов

    Рис. 11.4. Окно Query Builder построителя SQL-запросов
  3. В окно Query Builder построителя SQL -запросов для колонки EmployeeSurname укажите тип сортировки ( Sort Type ) - по алфавиту - Ascending (рисунок 11.5). После этого в команде Select добавится код
    ORDER BY EmployeeSurname
    Полный вид команды Select следующий:
    SELECT JobRoleID, EmployeeSurname, EmployeePatronymic,
     EmployeeID, EmployeeName, EmployeeStatus, Access, NetName, FirstDate
    FROM Employee
    ORDER BY EmployeeSurname
    Задание режима сортировки данных по фамилии сотрудника

    увеличить изображение
    Рис. 11.5. Задание режима сортировки данных по фамилии сотрудника
  4. Завершите формирование SQL -запроса, нажимая кнопки "OK" и "Next" в окне Query Builder.

    После компиляции и запуска приложения список сотрудников будет упорядочен по алфавиту, как показано на рисунке 11.6.

    Экранная форма с упорядоченным списком сотрудников

    увеличить изображение
    Рис. 11.6. Экранная форма с упорядоченным списком сотрудников

Формирование отображения списка сотрудников с полными данными

Для формирования в списке сотрудников информации об фамилии, имени и отчестве необходимо в таблицу Empoyee объекта dsEmployee класса DataSetEmployee добавить вычисляемый столбец и связать с этом столбцом элемент списка отображения listBoxEmployee.

Модификацию необходимо проводить в следующей последовательности.

  1. Для элемента списка listBoxEmployee очистить привязку к источнику данных. Для этого в методе FormEmployee_Load закомментировать следующие строки кода:
    //this.listBoxEmployee.DataSource = this.dsEmployee;
    //this.listBoxEmployee.DisplayMember = //"Employee.EmployeeSurname";
  2. Добавляем в класс FormEmployee метод, который будет в таблицу Empoyee объекта dsEmployee класса Data Set добавлять вычисляемый столбец с фамилией, именем и отчеством сотрудника.
    private void AddColumsFullName()
    {
      dsEmployee.Employee.Columns.Add("FullName", typeof(string),
       "EmployeeSurname+' '+EmployeeName+' '+EmployeePatronymic");
    }
  3. Добавляем в класс FormEmployee метод, который будет связывать элемент списка очистить привязку listBoxEmployee с объектом dsEmployee класса Data Set.
    private void AddListBoxEmployeeDataSource()
    {
       listBoxEmployee.DataSource = this.dsEmployee;
      listBoxEmployee.DisplayMember = "Employee.FullName";
    }
  4. Вновь созданные методы будем вызывать при загрузке формы FormEmployee. Для этого модифицируем метод Load, добавив в него после метода EmployeeFill вызов методов AddColumsFullName и AddListBoxEmployeeDataSource.
  5. После компилирования и запуска программы экранная форма "Учет сотрудников" должна иметь вид, аналогичный, приведенному на рисунке 11.7.
    Экранная форма с полными данными по сотрудникам

    увеличить изображение
    Рис. 11.7. Экранная форма с полными данными по сотрудникам

Задание на лабораторную работу

  1. Изучите теоретический материал.
  2. Модифицируйте приложение для обеспечения:
    • вывода списка сотрудников, содержащего фамилии, имена и отчества;
    • упорядочения выводимого списка сотрудников по алфавиту.
  3. Протестируйте приложение.
Анна Иваненко
Анна Иваненко

В самостоятельной работе 8 написано: "В пункте "Server name" задаем имя сервера, которое необходимо узнать у преподавателя". Где узнать это имя?

Вячеслав Шестивский
Вячеслав Шестивский

Вроде всё выставил верно, но при клике на "Сотрудники", меню из FormEmplyee не вставляется в меню главного окна а висит в дочернем окне снизу.  Как поправить?

Татьяна Ковалюк
Татьяна Ковалюк
Украина, Киев, Киевский политехнический институт, 1974
Анастасия Балыбердина
Анастасия Балыбердина
Украина, Киев, НТУУ КПИ