Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пояснительная к курсачу.docx
Скачиваний:
67
Добавлен:
12.03.2015
Размер:
749.7 Кб
Скачать

Регистрация ремонтов

Форма регистрации ремонтов создана для более удобного редактирования существующих и добавления новых записей в таблицу ремонтов. Она предоставляет более наглядный способ заполнения полей в записях. Внешний вид формы:

Как видно по скриншоту, данное окно позволяет задать все поля для новой строки в таблице REPAIR. При этом выбор станка и типа ремонта производится из ниспадающих списков, которые берут свои данные из таблицMACHINEиREPAIRTYPEсоответственно. Для инициализации компонентов формы при загрузке приложения вызывается методregistration_load():

/* загрузка страницы регистрации ремонтов */

private void registration_load() {

bsRepairs.DataSource = dtRepair;

//связь ComboBox'ов с нужными полями в таблицах

comboRegMachine.DataSource = dtMachine;

comboRegMachine.DisplayMember = "MACHINE_CODE";

comboRegRepairType.DataSource = dtRepairType;

comboRegRepairType.DisplayMember = "REPAIRTYPE_NAME";

//установка текущих значений

repairs_current_changed();

}

Для того, чтобы в данных компонентах при перемещении по таблице отображались правильные данные, при нажатии на кнопки перехода к следующей / предыдущей записям вызывается метод repairs_current_changed():

/* регистрация ремонтов - обновление всех полей формы */

private void repairs_current_changed() {

//выбранная в навигаторе строка

DataRowView cur_drw = (DataRowView)bsRepairs.Current;

DataRow drow = cur_drw.Row;

string machine_code = drow.Field<string>("MACHINE_CODE");

set_machine_combo_to(machine_code);

int repairtype_code = drow.Field<int>("REPAIRTYPE_CODE");

set_repairtype_combo_to(repairtype_code);

DateTime date = drow.Field<DateTime>("REPAIR_STARTDATE");

set_date_field_to(date);

string note = drow.Field<string>("REPAIR_NOTE");

set_note_field_to(note);

string done = drow.Field<string>("REPAIR_DONE");

set_done_field_to(done);

//сброс флагов изменения и новой строки

reg_repair_changed = false;

reg_new = -1;

}

Данный метод последовательно обновляет все поля формы в соответствии с информацией, содержащейся в текущей (выбранной) строке таблицы.

При нажатии на кнопку «OK» формы сначала производится проверка, какое действие совершил пользователь – модификацию записи или добавление новой записи. В зависимости от этого выбираются дальнейшие действия. Если была осуществлена модификация, то происходит простое обновление данных в БД. Если вставка записи, то формируетсяinsert-запрос на добавление новой строки с параметрами, выбранными пользователем в компонентах формы:

Код SQL-запроса:

insert into repair(MACHINE_CODE,

REPAIRTYPE_CODE,

REPAIR_STARTDATE,

REPAIR_NOTE,

REPAIR_DONE)

values (:machine_code,

:reptype_code,

:startdate,

:note,

:done)

Реализация в приложении:

private void tsRepair_OK_Click(object sender, EventArgs e) {

//если была вставка новой строки

if (reg_new != -1) {

//извлечение кода станка

DataRowView machine_rowview =

(DataRowView)comboRegMachine.SelectedItem;

DataRow machine_row = machine_rowview.Row;

string machine_code = machine_row.Field<string>("MACHINE_CODE");

//извлечение кода ремонта

DataRowView reptype_rowview =

(DataRowView)comboRegRepairType.SelectedItem;

DataRow reptype_row = reptype_rowview.Row;

int reptype_code = reptype_row.Field<int>("REPAIRTYPE_CODE");

/*

... и т.д для всех полей

*/

//запись результатов в БД

OleDbCommand cmd = new OleDbCommand("<код запроса>", con, trans);

cmd.Parameters.AddWithValue("machine_code", machine_code);

cmd.Parameters.AddWithValue("reptype_code", reptype_code.ToString());

cmd.Parameters.AddWithValue("startdate", dt.ToShortDateString());

cmd.Parameters.AddWithValue("note", note);

cmd.Parameters.AddWithValue("done", done);

cmd.ExecuteNonQuery();

}

adRepair.Update((DataTable)bsRepairs.DataSource);

dtRepair.Clear();

adRepair.Fill(dtRepair);

bsRepairs.MoveLast();

dtMachine.Clear();

adMachine.Fill(dtMachine);

reg_repair_changed = false;

reg_new = -1;

}

Для удобства чтения исходного кода здесь и в дальнейшем текст запроса во вставках будет заменяться строкой <текст запроса>.

Если данные в строке были изменены, но пользователь не нажал «OK», показывается диалоговое окно, в котором он должен выбрать, сохранить сделанные изменения или нет:

В зависимости от выбранного варианта происходит либо откат изменений, либо вызов приведенной выше функции сохранения.