Private void Form2_Load(object sender, EventArgs e)




{

//при открытии формы заполним список comboBox1

string CommandText = "SELECT T.id, T.name From MyDB.dbo.Table_food T"; //строка запроса

string ConnectionString = ""; //строка подключения

SqlDataAdapter dataAdapter = new SqlDataAdapter(CommandText, ConnectionString);

//Создаем объект DataSet:

DataSet ds = new DataSet();

//Заполняем таблицу Table1 объекта ds данными из базы, это те данные, которые получил запрос:

dataAdapter.Fill(ds, "Table1");

DataTable dt = new DataTable();

dt = ds.Tables["Table1"];

foreach (DataRow row in dt.Rows) //перебираем все строки полученной таблицы

{

string col1 = row["name"].ToString();

comboBox1.Items.Add(col1);

}

}

 

 

2. При выборе стола необходимо загрузить таблицу с уже заказанными блюдами.

Если стол занят, то эти блюда должны быть в таблице заказы и флаг активности стола должен быть в положении истина.

Здесь лучше создать и использовать хранимую процедуру.

Процесс создания хранимой процедуры в среде SQL Server Management Studio:

Добавляем новую хранимую процедуру

Устанавливаем параметры

Далее вводим текст хранимой процедуры и нажимаем кнопку выполнить:

 

 

В нашем случае код хранимой процедры будет следующим:

CREATE PROCEDURE [dbo].[UpdateOrferFood]

-- Add the parameters for the stored procedure here

@p1 varchar(145) = '', --name стола

@p2 tinyint = 0, --активность стола

@p3 tinyint = 0 --только загрузка

 

AS

BEGIN

SET NOCOUNT ON;

--получим значения таблицы [dbo].[Order_food] по параметрам стол и активность стола

if @p3=1

begin

SELECT

T.id,

T.table_food_id,

T.Food_id,

T.kol,

T.activity,

F.name,

F.Price,

TF.name

from MyDB.dbo.Order_Food T

inner join MyDB.dbo.Food F

on T.Food_id = F.id

inner join MyDB.dbo.Table_food TF

on T.table_food_id = TF.id

where (TF.name = @p1 and T.activity=@p2) -- активный стол

 

END

 

END

 

Теперь требуется, используя эту хранимую процедуру, загрузить данные в таблицу при выборе стола и настроить код кнопки сохранить.

Дважды щелкаем по списку выбора стола и, тем самым, создаем обработчик события «при изменении». Код будет следующий:

dataGridView1.Rows.Clear(); //очистка всей таблицы

try

{

SqlConnection conn = new SqlConnection(); // соединение с сервером

conn.ConnectionString = "";

SqlCommand myCommand = conn.CreateCommand(); //создаем команду

myCommand.CommandType = CommandType.StoredProcedure; //тип команды хр процедура

myCommand.CommandText = "[dbo].[UpdateOrferFood]"; //название процедуры

 

myCommand.Parameters.Add("@p1", SqlDbType.VarChar, 145); //параметр имя стола

myCommand.Parameters["@p1"].Value = comboBox1.Text;

 

myCommand.Parameters.Add("@p2", SqlDbType.Int, 1); //параметр активность стола

myCommand.Parameters["@p2"].Value = 1;

 

myCommand.Parameters.Add("@p3", SqlDbType.Int, 1); //параметр только загрузка

myCommand.Parameters["@p3"].Value = 1;

conn.Open();

SqlDataReader dataReader = myCommand.ExecuteReader();

while (dataReader.Read())

{

int kol = dataReader.GetInt32(3); //количество заказано

decimal pr = dataReader.GetDecimal(6); //цена заказано

decimal sum = kol * pr; //сумма строки

string nameFood = dataReader.GetString(5);//блюдо заказано

//добавляем эти значения в таблицу формы

dataGridView1.Rows.Add(nameFood, Convert.ToString(kol), Convert.ToString(pr), Convert.ToString(sum));

}

 

}

catch (Exception ex)

{ MessageBox.Show(ex.ToString()); }

 

Здесь сначала создаем соединение с сервером, затем создаем sql-команду, указываем, что команда является хранимой процедурой. Задаем значения параметрам. Результат чтения выборки помещаем в dataReader, далее в цикле перебираем значения выборки и результат заносим в таблицу на форме.

3. Обработчик нажатия на кнопку сохранить. Добавим еще одну хранимую процедуру. Процедура будет добавлять данные в таблицу Order_Food. Здесь есть один нюанс, если данные в этой таблице есть (т.е. клиент делает дозаказ), тогда надо не записывать данные, а обновлять их, для каждой строки таблицы основной формы. Текст процедуры можно взять следующий:

ALTER PROCEDURE [dbo].[UpdateTableFoodOrder]

-- обязательные параметры процедуры

@p1 varchar(145) = '', --name стола

@p2 varchar(145) = '', --name еды

@p3 int = 0, --количество еды

@p4 tinyint = 0 --активность стола

 

 

AS

BEGIN

SET NOCOUNT ON;

--переменная @tCount - покажет новый это заказ или дозаказ

--она возвращает количество строк в таблице по заданным условиям

declare @tCount int

set @tCount = (SELECT count(*)

from MyDB.dbo.Order_Food T

left join MyDB.dbo.Food F

on T.Food_id = F.id

left join MyDB.dbo.Table_food TF

on T.table_food_id = TF.id

where (TF.name = @p1 and T.activity = @p4 and F.name = @p2));

if(@tCount=0)

begin

--вставка данных, т.к. новый заказ

insert into MyDB.dbo.Order_Food(table_food_id, Food_id, kol, activity)

VALUES ((select TF.id from MyDB.dbo.Table_food TF where TF.name = @p1), (select TF.id from MyDB.dbo.food TF where TF.name = @p2), @p3,1);

end

else

begin

--обновление данных, т.к. дозаказ

update MyDB.dbo.Order_Food

SET kol = @p3

WHERE (table_food_id =

(select TF.id from MyDB.dbo.Table_food TF where TF.name = @p1)

and Food_id = (select TF.id from MyDB.dbo.food TF where TF.name = @p2)

and activity = 1)

 

end

 

END

 

 

Код кнопки сохранить:

try

{

using (var sqlConn = new SqlConnection(""))

{

sqlConn.Open();

foreach (DataGridViewRow D in dataGridView1.Rows)

{

 

var sqlCmd = new SqlCommand("[dbo].[UpdateTableFoodOrder]", sqlConn);

sqlCmd.CommandType = CommandType.StoredProcedure;

sqlCmd.Parameters.AddWithValue("@p1", comboBox1.Text); //название стола

sqlCmd.Parameters.AddWithValue("@p2", D.Cells[0].Value); //название блюда параметр

sqlCmd.Parameters.AddWithValue("@p3", D.Cells[1].Value); //заказанное количество

sqlCmd.Parameters.AddWithValue("@p4", 1); //активность стола

 

 

sqlCmd.ExecuteNonQuery();

}

}

 

}

catch (Exception ex)

{ MessageBox.Show(ex.ToString()); }

4. Рассчитать заказ – кнопка по которой на форме появляется надпись с суммой заказа.

Выполнить самостоятельно.

5. Закрыть заказ (обновляет данные в таблице Заказы клиентов, при этом активность стола переводит в положение ложь)

Выполнить самостоятельно.

6. При изменении значения столбца количество требуется перерасчет столбца сумма.

Для выполнения этой простой команды потребуется задать обработчик события dataGridView1_CellEndEdit это событие возникает при изменении выбранной ячейки. Код процедуры будет следующий:

int idx = dataGridView1.CurrentRow.Index;

dataGridView1[3, idx].Value = Convert.ToDouble(dataGridView1[1, idx].Value) * Convert.ToDouble(dataGridView1[2, idx].Value);

 

Здесь мы сначала определили номер текущей строки. Затем для текущей строки посчитали сумму = количество*цена.

7. При нажатии на кнопку Добавить блюда должно открыться диалоговое окно выбора блюда. При выборе блюда требуется перенос данных об этом блюде в таблицу.

Здесь при нажатии на кнопку откроем форму выбора блюд, у нас это форма FormFood. В этой форме необходимо добавить кнопку ОК, при нажатии на которую будем закрывать форму, т.е. код кнопки ОК будет следующим: Close(); А код кнопки Добавить блюдо:

 

FormFood f = new FormFood(); //создаем объект класса FormFood



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-03 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: