Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.OleDb
Public Class frmOrder
Dim Conn As New OleDbConnection
Dim da As OleDbDataAdapter
Dim ds As New DataSet
Dim strConn As String
Dim lsFindCustomer As Boolean = False
Dim lsFindFood As Boolean = False
Private Sub order1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
strConn = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=C:\ร้านอาหาร11.mdb"
'เพิ่มคอลัมน์เข้าไปในคอลโทรล lsvProductList 5 คอลัมน์
lsvProductList.Columns.Add("รหัสสินค้า", 60, HorizontalAlignment.Left)
lsvProductList.Columns.Add("รหัสประเภท", 60, HorizontalAlignment.Left)
lsvProductList.Columns.Add("ชื่อสินค้า", 150, HorizontalAlignment.Left)
lsvProductList.Columns.Add("ราคาขาย", 65, HorizontalAlignment.Right)
lsvProductList.Columns.Add("จำนวน", 50, HorizontalAlignment.Right)
lsvProductList.Columns.Add("รวมเป็นเงิน", 70, HorizontalAlignment.Right)
lsvProductList.View = View.Details 'แสดงรายการแบบ Details
lsvProductList.GridLines = True 'ให้มีเส้นตาราง
lsvProductList.FullRowSelect = True 'คลิกเลือกรายการแบบแถว
With Conn 'เริ่มต้นเชื่อมต่อกับฐานข้อมูล
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open() 'เชื่อมต่อกับฐานข้อมูล
End With
ClearFoodData() 'เรียกซับรูทีน ClearProductData()ทำงาน
lblNet.Text = "0"
End Sub
'ซับรูทีน ClearFoodData() ทำหน้าที่ล้างข้อมูลสินค้าที่แสดงอยู่ในคอลโทรลแต่ละตัว
Private Sub ClearFoodData()
txtFoodID.Text = ""
lblType.Text = ""
lblFoodName.Text = ""
lblSalePrice.Text = ""
txtAmount.Text = ""
lblTotal.Text = ""
End Sub
Private Sub txtFoodID_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtFoodID.TextChanged
Dim sqlfood As String
If txtFoodID.Text = "" Then Exit Sub
sqlfood = "select * from food where food_id='" & txtFoodID.Text & "'"
If lsFindFood = True Then
ds.Tables("food").Clear()
End If
da = New OleDbDataAdapter(sqlfood, Conn)
da.Fill(ds, "food")
If ds.Tables("food").Rows.Count <> 0 Then
lsFindFood = True
'แสดงข้อมูลรายการอาหารในคอลโทรลแต่ละตัว
txtFoodID.Text = CStr(ds.Tables("food").Rows(0).Item("food_id"))
lblType.Text = CStr(ds.Tables("food").Rows(0).Item("type_id"))
lblFoodName.Text = CStr(ds.Tables("food").Rows(0).Item("food_name"))
lblSalePrice.Text = CStr(ds.Tables("food").Rows(0).Item("food_price"))
CalculateTotal() 'เรียกซับรูทีน CalculateTotal()ทำงาน
txtAmount.Focus()
Else
lsFindFood = False
MessageBox.Show("รหัสสินค้าที่คุณป้อนไม่ถูกต้อง", "ผลการตรวจสอบ", MessageBoxButtons.OK, MessageBoxIcon.Information)
ClearFoodData()
txtFoodID.Focus()
End If
End Sub
Private Sub CalculateTotal()
Dim Total As String
Total = CStr(CDbl(lblSalePrice.Text) * CDbl(txtAmount.Text))
lblTotal.Text = CStr((Total))
End Sub
Private Sub cmdAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdd.Click
If (txtFoodID.Text = "") Or (lblFoodName.Text = "") Then
txtFoodID.Focus()
Exit Sub
End If
If CInt(txtAmount.Text) = 0 Then
txtAmount.Focus()
Exit Sub
End If
Dim i As Integer = 0 'ตัวแปรวนลูป
Dim lvi As ListViewItem 'ตัวแปรออบเจ็กต์ ListViewItem
Dim tmpFoodID As Integer = 0 'ตัวแปรเก็บรหัสอาหาร
For i = 0 To lsvProductList.Items.Count - 1
tmpFoodID = CInt(lsvProductList.Items(i).SubItems(0).Text)
If CInt(txtFoodID.Text) = tmpFoodID Then
MessageBox.Show("คุณเลือกรายการอาหารซ้ำกัน กรุณาเลือกใหม่!!!", "ผลการตรวจสอบ", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Information)
ClearFoodData()
txtFoodID.Focus()
txtFoodID.SelectAll()
Exit Sub
End If
Next
Dim anyData() As String
anyData = New String() {txtFoodID.Text, lblFoodName.Text, lblSalePrice.Text, txtAmount.Text, lblTotal.Text}
lvi = New ListViewItem(anyData) 'เก็บข้อมูลรายการอาหารลงในออบเจ็กต์ lvi
lsvProductList.Items.Add(lvi) 'เพิ่มรายการในคอลโทรล lsvProductList
CalculateNet() 'เรียกซับรูทีน CalculateNet() ทำงาน
ClearFoodData() 'เรียกซับรูทีน ClearFoodData() ทำงาน
cmdSave.Enabled = True
txtFoodID.Focus()
End Sub
Private Sub lsvProductList_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lsvProductList.SelectedIndexChanged
Dim i As Integer 'ตัวแปรวนลูป
'ให้วนตั้งแต่รายการแรกจนถึงรายการสุดท้าย
For i = 0 To lsvProductList.SelectedItems.Count - 1
Dim lvi As ListViewItem 'ตัวแปรออบเจ็กต์ ListViewItem
lvi = lsvProductList.SelectedItems(i) 'อ่านแถวที่ถูกคลิก เก็บไว้ที่ตัวแปร lvi
lsvProductList.Items.Remove(lvi) 'เอาแถวที่ถูกคลิกออก
Next
CalculateNet() 'เรียกซับรูทีน CalculatNet()ทำงาน
txtAmount.Focus()
End Sub
Private Sub CalculateNet()
Dim i As Integer = 0 'ตัวแปรวนลูป
Dim tmpNetTotal As Double = 0 'ตัวแปรเก็บยอดสั่งซื้ออาหารทั้งหมด
'วนลูปตั้งแต่แถวแรกจนถึงแถวสุดท้าย
For i = 0 To lsvProductList.Items.Count - 1
'คำนวณยอดสั่งซื้ออาหารทั้งหมด
tmpNetTotal += CDbl(lsvProductList.Items(i).SubItems(4).Text)
Next
'แสดงยอดสั่งซื้อสินค้าทั้งหมด
lblNet.Text = tmpNetTotal.ToString("#,##0.00")
End Sub
Private Sub cmdClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdClear.Click
lsvProductList.Items.Clear()
lblNet.Text = "0"
txtFoodID.Focus()
End Sub
Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click
If lsvProductList.Items.Count <> 0 Then
If MessageBox.Show("คุณต้องการบันทึกรายการอาหาร ใช่หรือไม่ ?", "คำยืนยัน", MessageBoxButtons.OK, MessageBoxIcon.Information) = Windows.Forms.DialogResult.Yes Then
Dim i As Integer 'ตัวแปรวนลูป
Dim sqlsave As String 'ตัวแปรเก็บชุดคำสั่ง SQL
Dim LastOrderID As Long 'ตัวแปรเก็บรหัสสั่งซื้อรายการอาหารล่าสุด
Dim comSave As New OleDbCommand
Dim drLastOrderID As OleDbDataReader
'สร้างชุดคำสั่ง SQL เพื่อเพิ่มข้อมูลลงในตาราง Order
sqlsave = "insert into order(customer_name,order_date)"
sqlsave = sqlsave & " values('" & txtCustomerName.Text & "',"
sqlsave = sqlsave & "'" & Date.Today & "')"
With Conn 'เริ่มต้นเชื่อมต่อกับฐานข้อมูล
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open() 'เชื่อมต่อกับฐานข้อมูล
End With
With comSave
.CommandType = CommandType.Text
.CommandText = sqlsave
.Connection = Conn
.ExecuteNonQuery() 'รันชุดคำสั่ง sqlsave
End With
'เลือกรหัสรายการสั่งซื้ออาหารล่าสุด 1 เรคคอร์ด จากตาราง oder
sqlsave = "select top 1 order_id from order"
sqlsave = sqlsave & "Order by order_id DESC"
With Conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
With comSave
.CommandType = CommandType.Text
.CommandText = sqlsave
.Connection = Conn
'รันชุดคำสั่ง sqlsave ผลการคิวรีเก็บไว้ที่ออบเจ็กต์ drLastOrderID
drLastOrderID = .ExecuteReader()
drLastOrderID.Read()
'อ่านรหัสรายการสั่งซื้ออาหารล่าสุดเก็บไว้ที่ตัวแปร LastOrderID
LastOrderID = CLng(drLastOrderID.Item("order_id"))
End With
drLastOrderID.Close() 'ปิดการใช้งานออบเจ็กต์ drLastOrderID
'วนลูปตั้งแต่แถวแรกจนถึงแถวสุดท้าย
For i = 0 To lsvProductList.Items.Count - 1
'สร้างชุดคำสั่ง SQL เพื่อเพิ่มข้อมูลลงในตาราง order detail
sqlsave = "insert into (order_detail)(order_id,food_id,"
sqlsave = sqlsave & "unitPrice,quantity,discount)"
sqlsave = sqlsave & " values(" & LastOrderID & ","
sqlsave = sqlsave & "'" & CStr(lsvProductList.Items(i).SubItems(0).Text) & "',"
sqlsave = sqlsave & CInt(lsvProductList.Items(i).SubItems(2).Text) & ","
sqlsave = sqlsave & CInt(lsvProductList.Items(i).SubItems(3).Text) & ","
sqlsave = sqlsave & "0)"
With comSave
.CommandText = sqlsave
.ExecuteNonQuery()
End With
Next
MessageBox.Show("บันทึกรายการอาหารที่สั่งซื้อเรียบร้อยแล้ว !!!", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
lsvProductList.Clear()
ClearFoodData()
lblNet.Text = "0"
txtCustomerName.Focus()
End If
End If
End Sub
End Class