Создание документа входящей информации с помощью обьекта DataSet

Лабораторная работа 9.

Результатом выполнения лабораторной работы должно быть приложение, позволяющее создать документ «Накладная». Структура документа и таблицы справочной информации, необходимые для создания документа описаны в лабораторной работе №8. Экранная форма создания накладных представлена на рис. 1

 

Рис. 1

 

Для выполнения работы необходимо:

1. Создать графические элементы для отображения информации справочной и первичной информации.

2. Для создания подключения к таблицам базы данных. Выбрать пункт Choose Data Source → Add Project Data Set объектов DataGridView.

3. Добавить таблицы naklad, tov_nakl, post, tovar в создаваемый DataSet.

4. Для таблиц naklad, tov_nakl – создать внешний ключ;

5. Задать свойство DataMember :

DataGridView DataMember
DataGridView1 post
DataGridView2 tovar
DataGridView3 tov_nakl

 

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

 

private void Form1_Load(object sender, EventArgs e)

{

//this.tov_naklTableAdapter.Fill(this.tovarDataSet.tov_nakl);

this.nakladTableAdapter.Fill(this.tovarDataSet.naklad);

this.tovarTableAdapter.Fill(this.tovarDataSet.tovar);

this.postTableAdapter.Fill(this.tovarDataSet.post);

}

Строку, заполняющую таблицу tov_nakl закомментировать, чтобы при загрузке формы не заполнялся DataGridView3 – он будет заполняться значения только в момент заполнения данными.

7. Для компонентов TextBox задать свойства:

TextBox DataBinding.Tag DataBinding.Text ReadOnly
TextBox2 postBindingSource - kod_post postBindingSource - nazv true
TextBox3 postBindingSource - kod_post postBindingSource - adres true
TextBox4 tovarBindingSource - kod_tov tovarBindingSource - nazv true
TextBox5 tovarBindingSource - kod_tov tovarBindingSource - gost true

 

8. Для отображения значений «Название товара», «ГОСТ» вместо «Код_товара» необходимо создать запрос вида (рис. 2):

Рис. 2

SELECT tov_nakl.kod_nakl, tov_nakl.kod, tov_nakl.kod_tov, tov_nakl.kol, tov_nakl.cena, tovar.nazv, tovar.gost

FROM tov_nakl INNER JOIN

tovar ON tov_nakl.kod_tov = tovar.kod_tov

WHERE (tov_nakl.kod_nakl = @kod_nakl)

Обратить внимание на ограничение WHERE (tov_nakl.kod_nakl = @kod_nakl). Поле kod_nakl – задается как поле фильтрации, для того, чтобы в DataGridView3 отображались не все записи товаров по накладной, а только те, которые принадлежать текущей накладной.

Запрос создается путем:

8.1 В контекстном меню таблицы tov_nakl выбрать пункт Add – Query

8.2. В мастере конфигурации объекта TableAdapter выбрать пункт Use SQL statements

8.3. Задать тип запроса. Выборка с возращением массива записей.

8.4. Добавить таблицу tovar в конструктор запросов, при этом создаться естественное объединение двух таблиц (INNER JOIN) по полям kod_tov. Задать фильтр = @kod_nakl для поля = kod_nakl для отображения.

8.5. Проверить правильность выборки данных (Execute Query).

8.6. Задать имя созданного запроса или использовать созданное по умолчанию (FillBy).

9. Создать поле sum в tov_nakl для расчета суммы товара (kol*cena). Для этого:

9.1. Открыть схему;

9.2 В В контекстном меню таблицы tov_nakl выбрать пункт Add – Coulmn;

9.3. Задать имя поля sum;

9.4. Свойству Expression задать значение kol*cena;

10. В DataGridView3 добавить поля для отображения «Название товара», «ГОСТ», «Суммы». Для этого:

10.1. В контекстном меню DataGridView3 выбрать пункт Add Column

10.2 Задать свойства полей:

DataPropertyValue Name Header Text
Nazv Naim Название товара
Gost gost ГОСТ
Sum Suma Сумма

где свойство DataPropertyValue – это свойство, которое задает поле, значение которого будет отображаться (Nazv, Gost – из таблицы tovar).

11. Создать обработчик события нажатия кнопки „Создать накладную”. Для добавления новых записей будет использоватьcя метод Insert объекта nakladTableAdapter.

 

private void button1_Click(object sender, EventArgs e)

{

if (textBox1.Text.Length > 0)

{

if (MessageBox.Show("Ви дійсно бажаєте створити накладку?", "Підтвердження", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

{

nakladTableAdapter.Insert(Convert.ToInt32(textBox1.Text), dateTimePicker1.Value,(int)textBox2.Tag);

nakladTableAdapter.Update(tovarDataSet.naklad);

nakladTableAdapter.Fill(tovarDataSet.naklad);

}

}

else

MessageBox.Show("Ви маєте ввести номер наказу", "Повідомлення", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

12. Создать обработчик события нажатия кнопки „Создать накладную”. Для добавления новых записей будет использоватьcя метод Insert объекта tov_naklTableAdapter. Необходимо обратить внимание, что в таблице tov_nakl – есть внешний ключ kod_nakl, значение которого необходимо также заполнить. Для этого необходимо знать значение первичного ключа вновь созданной записи таблицы nakl, что можно сделать, создав запрос (рис. 3):

 

.

Рис. 3

 

Для создания запроса необходимо:

12.1 В контекстном меню таблицы naklad выбрать пункт Add – Query

12.2. В мастере конфигурации объекта TableAdapter выбрать пункт Use SQL statements

12.3. Задать тип запроса. Выборка с возращением одного значения (Scalar).

12.4. Записать запрос

SELECT MAX(kod_nakl) AS Expr1

FROM naklad

12.5. Задать имя созданного запроса (MаxQuery).

Результатом выполнения этого запроса будет значение первичного ключа последней созданной записи таблицы naklad, передача значения, возвращаемого этим запросом выделена красным цветом в листинге.

 

private void button2_Click(object sender, EventArgs e)

{

if (MessageBox.Show("Додати до розрахунку?", "Підтвердження", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

{

kol++; // переменная для хранения количества товаров по накладной

tov_naklTableAdapter.Insert((int)nakladTableAdapter.MaxQuery(), (int)textBox4.Tag, Convert.ToInt32(textBox6.Text), Convert.ToDecimal(textBox7.Text));

tov_naklTableAdapter.Update(tovarDataSet.tov_nakl);

tov_naklTableAdapter.FillBy(tovarDataSet.tov_nakl, (int)nakladTableAdapter.MaxQuery());

allsum += (decimal)dataGridView3.Rows[kol - 1].Cells["sum"].Value; //переменная для хранения общей суммы по накладной

label13.Text = "Всього на суму " + allsum.ToString() + " грн.";

}

}

 



r.php"; ?>