C# WinForms / mysql으로 포스기 만들기 (5)
이번 시간에는 판매 내역 창에서 DB의 내용을 불러와서 그리드 뷰에 나타내어 DB기능들을 구현하도록 하겠습니다.
내용이 길어 한번에 보기 어려우시면 기능마다 끊어 보시는 걸 추천드립니다. (새로고침/검색/수정/품목삭제)
판매 내역을 위한 새 윈폼 창을 만듭니다.
Form2.cs 가 만들어 졌습니다. 판매 내역 목업을 참고하여 윈폼 창을 디자인 하겠습니다.
이것을 상품 판매 윈폼 창과 연결시키겠습니다.
상품 판매 윈폼창의 판매 내역 버튼을 두번 눌러 button click 코드를 생성시킵니다.
//판매내역 창 띄우기
private void button3_Click(object sender, EventArgs e)
{
Form2 dlg = new Form2();
dlg.ShowDialog();
}
프로그램을 실행하여 결과를 확인합니다.
정상적으로 판매내역창이 열린다면 뒤로가기 버튼을 구현 하겠습니다.
판매 내역 창에서 뒤로가기 버튼을 두번 눌러 button click 코드를 생성시킵니다.
//뒤로가기
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
정상적으로 판매내역창이 닫히면 그리드 뷰에 테이블의 내용을 불러오겠습니다.
이때 이 기능을 함수로 만들어서 새로고침 기능이 필요할때(데이터가 갱신 될 때) 마다 사용할 수 있게 구현 하겠습니다.
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
//DB에서 데이터 불러온 후 텍스트 박스 초기화 (데이터 갱신 함수)
public void LoadData()
{
string sql = "Server=localhost;Port=3306;Database=pos_dataset;Uid=root;Pwd=*****";
MySqlConnection con = new MySqlConnection(sql);
MySqlCommand cmd_db = new MySqlCommand("SELECT * FROM sales_tb;", con);
try
{
MySqlDataAdapter sda = new MySqlDataAdapter();
sda.SelectCommand = cmd_db;
DataTable dbdataset = new DataTable();
sda.Fill(dbdataset);
BindingSource bSource = new BindingSource();
bSource.DataSource = dbdataset;
dataGridView1.DataSource = bSource;
sda.Update(dbdataset);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
//텍스트 박스 초기화
textBox1.Text = "";
textBox6.Text = "";
textBox2.Text = "";
textBox3.Text = "";
textBox4.Text = "";
textBox5.Text = "";
}
.
.
.
//DB 불러오기(새로고침)
private void button5_Click(object sender, EventArgs e)
{
LoadData();
}
.
.
.
실행 할 때 오류가 난다면 선언문에 MySQL선언 여부를 확인하면 됩니다.
새로고침 버튼은LoadData()함수를 사용하여 간단히 구현했습니다.
새로고침을 통해 sales_tb의 데이터를 그리드 뷰에 가져왔습니다.
이제 순서대로 검색(Search), 수정(Update), 삭제(Delete) 기능을 구현해보겠습니다.
먼저 검색기능을 구현 하겠습니다.
namespace POS_build
{
public partial class Form2 : Form
{
//서버 사용 선언
MySqlConnection connection = new MySqlConnection("Server=localhost;Port=3306;Database=pos_dataset;Uid=root;Pwd=****");
MySqlCommand command;
MySqlDataAdapter adapter;
DataTable table = new DataTable();
public Form2()
{
InitializeComponent();
}
.
.
.
//데이터 조회 함수
public void searchData(string valueToSearch)
{
string query = "SELECT * FROM sales_tb WHERE CONCAT(`name`, `price`, `count`, `total`) like '%" + valueToSearch + "%'";
command = new MySqlCommand(query, connection);
adapter = new MySqlDataAdapter(command);
table = new DataTable();
adapter.Fill(table);
dataGridView1.DataSource = table;
}
private void Form2_Load(object sender, EventArgs e)
{
searchData("");
}
.
.
.
//검색기능
private void button2_Click_1(object sender, EventArgs e)
{
if (textBox1.Text == "")
{
MessageBox.Show("검색 정보를 입력해주세요");
}
else
{
string valueToSearch = textBox1.Text.ToString();
searchData(valueToSearch);
//텍스트 박스 초기화
textBox1.Text = "";
}
}
.
.
.
이제 검색창에 물품에 대한 정보 검색 시 해당되는 품목을 모두 보여줍니다.
다음으로 수정 기능을 구현 하겠습니다. 수정기능을 구현하기전 열을 선택하면 열의 정보가
텍스트 박스에 삽입되도록 하겠습니다.
namespace POS_build
{
public partial class Form2 : Form
{
.
.
.
int selectedRow;
.
.
.
//셀 클릭시 해당 행의 정보를 텍스트박스에 채움
private void dataGridView1_CellClick_1(object sender, DataGridViewCellEventArgs e)
{
selectedRow = e.RowIndex;
DataGridViewRow row = dataGridView1.Rows[selectedRow];
textBox6.Text = row.Cells[0].Value.ToString();
textBox2.Text = row.Cells[1].Value.ToString();
textBox3.Text = row.Cells[2].Value.ToString();
textBox4.Text = row.Cells[3].Value.ToString();
textBox5.Text = row.Cells[4].Value.ToString();
}
.
.
.
셀의 정보는 [ no(0), name(1), price(2), count(3), total(4)] 입니다.
여러분이 판매 내역 폼에서 textBox를 설정한 순서를 잘 확인해서 코딩해야 됩니다.
다음으로 수정 기능을 구현하겠습니다.
MySQL쿼리문 중 데이터를 수정하는 UPDATE SET을 사용하여 테이블의 내용을 수정 합니다.
//수정기능
private void button3_Click_1(object sender, EventArgs e)
{
string constring = "Server=localhost;Port=3306;Database=pos_data;Uid=root;Pwd=*****";
if (textBox2.Text == "" || textBox3.Text == "" || textBox4.Text == "")
{
MessageBox.Show("항목을 정확히 입력해주세요");
textBox2.Clear();
textBox3.Clear();
textBox4.Clear();
}
else
{
decimal price = decimal.Parse(textBox3.Text);
decimal count = decimal.Parse(textBox4.Text);
decimal total = price * count;
textBox5.Text = total.ToString();
//업데이트를 통해 DB로 수정된 데이터 전송 - 기본키 기준으로 수정위치 탐색
string Query = "update pos_dataset.sales_tb set no ='" + this.textBox6.Text + "',name='" + this.textBox2.Text + "',price='" + this.textBox3.Text + "'," +
"count='" + this.textBox4.Text + "',total='" + this.textBox5.Text + "' where no ='" + this.textBox6.Text + "'";
MySqlConnection conDataBase = new MySqlConnection(constring);
MySqlCommand cmdDatabase = new MySqlCommand(Query, conDataBase);
MySqlDataReader myReader;
try
{
conDataBase.Open();
myReader = cmdDatabase.ExecuteReader();
MessageBox.Show("수정완료");
while (myReader.Read())
{
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
LoadData();
}
total은 price나 count의 수정에 따라 자동으로 계산되도록 코딩했습니다.
LoadData() 함수를 사용하여 수정과 동시에 갱신된 데이터를 그리드 뷰에 반영합니다.
banana를 검색하여 가격을 1800원으로 인상하고 개수를 10개로 수정하겠습니다.
banana 항목이 수정 된 것을 확인 할 수 있습니다.
마지막으로 품목 삭제 기능을 구현하고 이번 시간을 마무리 하겠습니다.
MySQL쿼리문 중 데이터를 수정하는 DELETE FROM 을 사용하여 테이블의 내용을 삭제 합니다.
//행 삭제
private void button4_Click(object sender, EventArgs e)
{
string constring = "Server=localhost;Port=3306;Database=pos_dataset;Uid=root;Pwd=*****";
if (textBox6.Text == "")
{
MessageBox.Show("삭제 할 항목을 찾지 못했습니다.");
}
else
{
//delete를 통해 DB로 삭제된 데이터 전송 - 기본키 기준으로 삭제위치 탐색
string Query = "delete from pos_dataset.sales_tb where no ='" + this.textBox6.Text + "';";
MySqlConnection conDataBase = new MySqlConnection(constring);
MySqlCommand cmdDatabase = new MySqlCommand(Query, conDataBase);
MySqlDataReader myReader;
try
{
conDataBase.Open();
myReader = cmdDatabase.ExecuteReader();
MessageBox.Show("삭제완료");
while (myReader.Read())
{
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
LoadData();
}
}
apple 항목을 삭제해보겠습니다.
apple 항목이 삭제 된 것을 확인 할 수 있습니다.
이번 시간에는 판매 내역 창에서 DB의 내용을 불러와서 그리드 뷰에 나타내어 DB기능들을 구현했습니다.
DB의 기본 기능인 CRUD(Create, Read, Update, Delete)를 C#에서 제어하여 MySql로 반영했습니다.
한 호흡이 길었지만 끊고가기 애매해서 한번에 모든 내용을 다뤘습니다.
다음 시간에는 재고현황 창에서 DB의 내용을 불러와서 그리드 뷰에 나타내어 DB기능들을 구현하고,
물품이 판매 될 때, 재고에서 수량이 감소 되는 것을 반영하는 방법을 배워보겠습니다.