Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод_указ_к_лабе_№_1 (1).doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
463 Кб
Скачать
☆

2.1 Цель работы

Приобретение опыта при использовании динамических запросов с задаваемыми параметрами, освоение запросов языка SQL для модификации данных.

2.2 Методические указания по организации самостоятельной работы студентов

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

2.3 Порядок выполнения работы и методические указания к её выполнению

Добавьте к программе ещё одну форму (EditForm), на которой разместите объекты для добавления и изменения данных (рис. 2.1) и дайте им соответственно названия textBox_Name, dateTimePicker_ColonizeDate, comboBox_Gender, textBox_Address, textBox_Group, comBox_Benefit, textBox_Passport, comboBox_Room, button_OK, button_Cancel.

Рисунок 2.1 – Форма ввода данных

Выберите элемент comboBox_Gender. Существует 2 способа получения доступа к элементам коллекции, которая будет представлять возможные значения в элементе ComboBox. Первый способ - выбрать свойство Items, в окне Properties, и нажать на кнопку с троеточием (рисунок 2.2).

Рисунок 2.2 – Окно свойств компонента ComboBox

Второй способ – нажать на стрелку в правом верхнем углу элемента, в появившемся меню выбрать пункт Edit Items. В появившемся окне напишите возможные значения элемента: мужской, женский (рис. 2.3).

Рисунок 2.3 – Редактирование списка элементов в компоненте ComboBox

Для задания типа льготы, следует сделать привязку данных к таблице Benefits. Для этого добавьте на форму элемент bindingSource1 и задайте для него источник данных HostelDataSet. Выберите элемент comboBox_Benefits и в меню, которое появляется при нажатии на стрелку в правом верхнем углу элемента, выберите Use data bound items. Указать значения, как показано на рисунке 2.4. Сделайте аналогичные действия для comboBox_Room, указав значения как на рисунке 2.5.

Рисунок 2.4 – Привязка данных о льготе к таблице Benefits

Рисунок 2.5 - Привязка данных для comboBox_Room

С панели инструментов (ToolBox) добавьте на форму компонент StudentsTableAdapter и дайте ему имя studentsTableAdapter (как аналог: добавьте на форму элемент BindingSource и перетащите его на форму. Откройте свойства bindingSource1 и щелкните по полю DataSource. Выберите Other Data Sources/ Project Data Sources/ HostelDataSet. В свойстве Data Member выбрать таблицу Students ).

Создайте запросы для добавления и модификации данных.

Для этого следует в окне Solution Explorer щелкнуть дважды источник данных HostelDataSet. В открывшемся дизайнере источника данных выбрать StudentsTableAdapter, нажать правой кнопкой мыши и в появившемся меню выбрать AddQuery, затем Use SQL Statament, затем Next. В окне выбора типа запроса выбрать UPDATE и нажать Next.

Заменить текст предлагаемого запроса на приведенный ниже (рис. 2.6) и в следующем окне задать имя запроса UpdateQuery.

Рисунок 2.6 – Добавление запроса Update к StudentsTableAdapter

Опять щелкнуть правой кнопкой мыши по StudentsTableAdapter и, аналогично выполнив действия Add Query → Use SQL Statament → DELETE, добавить запрос на удаление (рис 2.7).

Рисунок 2.7 – Добавление запроса Delete к StudentsTableAdapter

Сохранить запрос, дав ему имя DeleteQuery.

Далее щелкнуть правой кнопкой мыши по StudentsTableAdapter и выполнить действия AddQuery → Use SQL Statament → SELECT which returns rows и добавить следующий запрос:

SELECT Id, Name, Gender, Address, [Group], Passport, BenefitCode, RoomNumber, ColonizeDate FROM Students WHERE ([Id] = @Id)

Запрос на добавление данных можно не добавлять, так как требуемый текст совпадает со стандартной командой INSERT, прописанной в адаптере таблицы. Посмотреть (и исправить при необходимости) стандартные команды, прописанные в адаптере таблицы можно, выбрав нужный адаптер таблицы (например, StudentsTableAdapter) в дизайнере источника данных, и открыв в окне Properties нужные запросы (рис. 4.8)

Рисунок 2.8 – Просмотр запросов для добавления и модификации данных

Теперь можно перейти к коду для работы с формой. Данная форма будет иметь два конструктора. Первый – без параметров, для добавления новой записи, второй будет принимать информацию о значениях полей выбранной строки, для редактирования информации. Напишите их, предварительно объявив переменные (замените код EditForm.cs на следующий).

using System;

using System.Windows.Forms;

namespace Hostel

{

public partial class EditForm : Form

{

/// <summary>

/// Id студента

/// </summary>

private readonly int id;

/// <summary>

/// true - если запись модифицируется, false - если создаётся новая

/// </summary>

readonly bool edit;

/// <summary>

/// конструктор формы, для создания новой записи

/// </summary>

public EditForm()

{

InitializeComponent();

roomsTableAdapter.Fill(hostelDataSet.Rooms);

benefitsTableAdapter.Fill(hostelDataSet.Benefits);

edit = false;

}

/// <summary>

/// конструктор формы, для модификации уже существующей записи

/// </summary>

/// <param name="name">ФИО</param>

/// <param name="colonizeDate">Дата заселения</param>

/// <param name="gender">Пол</param>

/// <param name="address">Адрес</param>

/// <param name="group">Группа</param>

/// <param name="benefitCode">Тип льготы</param>

/// <param name="passport">Паспорт</param>

/// <param name="roomNumber">Номер комнаты</param>

/// <param name="id">ID студента</param>

public EditForm(int id, String name, string gender, string address, string group, string passport, int benefitCode, int roomNumber, DateTime colonizeDate)

: this()

{

roomsTableAdapter.Fill(hostelDataSet.Rooms);

benefitsTableAdapter.Fill(hostelDataSet.Benefits);

edit = true;

this.id = id;

textBox_Name.Text = name;

dateTimePicker_ColonizeDate.Value = colonizeDate;

switch (gender.ToUpper())

{

case "мужской":

comboBox_Gender.SelectedIndex = 0;

break;

case "женский":

comboBox_Gender.SelectedIndex = 1;

break;

default:

comboBox_Gender.SelectedIndex = 0;

break;

}

textBox_Address.Text = address;

textBox_Group.Text = group;

comboBox_Benefit.SelectedValue = benefitCode;

textBox_Passport.Text = passport;

comboBox_Room.SelectedValue = roomNumber;

}

private void button_OK_Click(object sender, EventArgs e)

{

string gender = "";

if (comboBox_Gender.SelectedIndex == 0)

{

gender = "мужской";

}

else if (comboBox_Gender.SelectedIndex == 1)

{

gender = "женский";

}

if (edit)

{

studentsTableAdapter.UpdateQuery(textBox_Name.Text, gender, textBox_Address.Text, textBox_Group.Text, textBox_Passport.Text, Convert.ToInt32(comboBox_Benefit.SelectedValue), Convert.ToInt32(comboBox_Room.SelectedValue), dateTimePicker_ColonizeDate.Value.ToString(), id);

}

else

{

studentsTableAdapter.Insert(textBox_Name.Text, gender, textBox_Address.Text, textBox_Group.Text, textBox_Passport.Text, Convert.ToInt32(comboBox_Benefit.SelectedValue), Convert.ToInt32(comboBox_Room.SelectedValue), dateTimePicker_ColonizeDate.Value);

}

Close();

}

private void button_Cancel_Click(object sender, EventArgs e)

{

Close();

}

}

}

К главной форме следует добавить пункт меню EditForm и подпункты в него: Add, Delete и Update (рисунок 2.9). Измените у элемента DataGridView1 в свойстве SelectionMode значение на FullRowSelect.

Рисунок 2.9 – Изменение главной формы

Создайте обработчики событий нажатия пунктов меню, добавив соответствующий код.

private bool edit;

private void addToolStripMenuItem_Click(object sender, EventArgs e)

{

if(!edit) return;

var edt = new EditForm();

edt.ShowDialog();

studentsTableAdapter.Fill(hostelDataSet.Students);

hostelDataSet.AcceptChanges();

}

private void updateToolStripMenuItem_Click(object sender, EventArgs e)

{

if (!edit) return;

var st = new HostelDataSet.StudentsDataTable();

studentsTableAdapter.FillBy(st,

Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value));

object[] row = st.Rows[0].ItemArray;

var edt = new EditForm(

Convert.ToInt32(row[0]),

row[1].ToString(),

row[2].ToString(),

row[3].ToString(),

row[4].ToString(),

row[5].ToString(),

Convert.ToInt32(row[6]),

Convert.ToInt32(row[7]),

Convert.ToDateTime(row[8])

);

edt.ShowDialog();

studentsTableAdapter.Fill(hostelDataSet.Students);

hostelDataSet.AcceptChanges();

}

private void deleteToolStripMenuItem_Click(object sender, EventArgs e)

{

if (!edit) return;

studentsTableAdapter.DeleteQuery(

Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value)

);

studentsTableAdapter.Fill(hostelDataSet.Students);

hostelDataSet.AcceptChanges();

}

Протестируйте приложение.

2.4 Содержание отчета

Отчет должен содержать: цель, задания полученные от преподавателя и результат их выполнения, выводы по работе.

4.5 Контрольные задания и вопросы

1 Расскажите про элемент TableAdapter и его свойства.

2 Какая команда добавляет строки в таблицу?

3 Какая команда изменяет строки в таблице?

4 Какая команда удаляет строки из таблицы?

5 Как изменить или удалить данные в одной таблице, основываясь на сведения из другой таблицы?

6 Можно ли изменять данные в несколькиз таблицах одной командой?