ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 341|ตอบกลับ: 2

แสดงรายการห้องพัก ว่าห้องไหนโดนเข้าพักแล้ว

[คัดลอกลิงก์]

2

กระทู้

4

โพสต์

52

เครดิต

Member

Rank: 2

เครดิต
52

แก้ไขครั้งสุดท้ายโดย araban_110 เมื่อ 2025-2-27 18:25

เรียนสอบถามอาจารย์ครับ
มีใครเคยทำหรือพอแนะนำ ได้บ้างครับ ว่าเราจะแสดงข้อมูลการจองห้องพัก ให้ออกมาเป็นตาราง วันที่ได้บ้างครับ ตามรูปตัวอย่างครับ  พอดี ทำออกมาแล้ว วันที่กับห้องไม่ตรงกัน งมหาหลายวันแล้ว ยังไม่ได้เลยครับ


            Dim SQL As String = " SELECT * FROM tb_booking WHERE checkIn >= #" & startDt & "#  AND checkOut <= #" & endDt & "#  "e
            Dim cmd As New OleDbCommand(SQL, conn)
            If conn.State = ConnectionState.Open Then conn.Close()
            conn.Open()
            Dim reader As OleDbDataReader = cmd.ExecuteReader()


            While reader.Read()
                Dim Start_Date As DateTime = reader.GetValue(10)
                Dim End_Date As DateTime = reader.GetValue(11)
                Dim Start_Date_C As Integer = Start_Date.Day
                Dim End_Date_C As Integer = End_Date.Day
                DVG_Calendar(Start_Date_C, End_Date_C).Style.BackColor = Color.Red

            End While

ตัวอย่าง

ตัวอย่าง

322

กระทู้

515

โพสต์

6973

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6973
โพสต์ 2025-3-2 14:13:59 | ดูโพสต์ทั้งหมด

ผมเขียนโค้ดเป็นตัวอย่างให้ดูเผื่อเป็นแนวทางก็ล่ะกันครับ โดยใช้ข้อมูลสมมุติแทน เวลานำไปใช้งานจริงก็ต้องดึงข้อมูลจากตาราง ซึ่งก็ขึ้นอยู่กับการออกแบบ จากภาพตัวอย่างที่ให้ผมมาดู เช่น ห้อง 305 จะมีการจองไว้ได้มากกว่า 1 วัน ผมก็เลยใช้ List(Of Integer) เข้ามาช่วย ...

*** แนะนำให้ใช้พวก Schedule Control เช่น DevExpress มาใช้งานแทนจะดีกว่าการใช้ตารางกริดครับ ***

โค้ดตัวอย่าง ... ตัดแปะโค้ดไปวางแปะไว้ในฟอร์มได้เลย เพราะผมไม่ได้ลาก DataGridView มาใส่ไว้บนฟอร์ม
  1. Public Class frmBooking
  2.     '// สร้างคลาสสำหรับเก็บข้อมูลการจองห้อง
  3.     Public Class RoomBookingInfo
  4.         '// Status เก็บสถานะของห้อง (Available, Occupied, Booked)
  5.         Public Property Status As String
  6.         '// BookedDates เก็บรายการวันที่ที่ถูกจอง List(Of Integer) ตัวอย่างคือสามารถจองได้หลายวัน เช่น 10, 11, 12
  7.         Public Property BookedDates As List(Of Integer)

  8.         '// สถานะ และวันที่ๆระบุ
  9.         Public Sub New(status As String, bookedDates As List(Of Integer))
  10.             Me.Status = status
  11.             Me.BookedDates = bookedDates
  12.         End Sub
  13.     End Class

  14.     Public Sub New()
  15.         InitializeComponent()
  16.         LoadRoomStatus()
  17.     End Sub

  18.     Private Sub LoadRoomStatus()
  19.         '// สร้าง DataGridView และเพิ่มคอลัมน์สำหรับวันที่ 1-31
  20.         Dim dgv As New DataGridView()
  21.         dgv.Dock = DockStyle.Fill
  22.         Me.Controls.Add(dgv)
  23.         '// ปรับรูปแบบของตารางกริด
  24.         dgv.RowHeadersVisible = False
  25.         dgv.AllowUserToAddRows = False
  26.         dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill

  27.         '// เพิ่มคอลัมน์ "Room" และวันที่ 1-31
  28.         dgv.Columns.Add("Room", "Room")
  29.         For day As Integer = 1 To 31
  30.             dgv.Columns.Add(day.ToString(), day.ToString())
  31.         Next

  32.         '// ข้อมูลการจองห้อง โดยใช้คลาส RoomBookingInfo (ส่วนนี้เราได้มาจากการอ่านค่าในตารางข้อมูล)
  33.         '// RoomBookingInfo จะประกอบด้วย สถานะของห้องและวันที่ในการจองห้อง (จองได้หลายวัน)
  34.         Dim roomBookings As New Dictionary(Of String, RoomBookingInfo) From {
  35.             {"101", New RoomBookingInfo("Occupied", New List(Of Integer)())},
  36.             {"102", New RoomBookingInfo("Occupied", New List(Of Integer)())},
  37.             {"105", New RoomBookingInfo("Booked", New List(Of Integer) From {10, 11, 12})},
  38.             {"201", New RoomBookingInfo("Available", New List(Of Integer)())},
  39.             {"202", New RoomBookingInfo("Available", New List(Of Integer)())},
  40.             {"203", New RoomBookingInfo("Booked", New List(Of Integer) From {20})}
  41.         }
  42.         '// เพิ่มแถวสำหรับแต่ละห้อง
  43.         For Each room In roomBookings.Keys
  44.             Dim row As New DataGridViewRow()
  45.             row.CreateCells(dgv)
  46.             row.Cells(0).Value = room '// ใส่หมายเลขห้องในคอลัมน์แรก

  47.             '// ตรวจสอบสถานะของห้องและวันที่
  48.             For day As Integer = 1 To 31
  49.                 Dim cellIndex As Integer = day '// ดัชนีของเซลล์เริ่มจาก 1 (วันที่ 1)
  50.                 Dim status As String = roomBookings(room).Status
  51.                 Dim bookedDates As List(Of Integer) = roomBookings(room).BookedDates

  52.                 '// ตรวจสอบสถานะและตั้งค่าสีพื้นหลัง
  53.                 If status = "Available" Then
  54.                     row.Cells(cellIndex).Style.BackColor = Color.White
  55.                 ElseIf status = "Occupied" Then
  56.                     row.Cells(cellIndex).Style.BackColor = Color.LightBlue
  57.                 ElseIf status = "Booked" AndAlso bookedDates.Contains(day) Then
  58.                     row.Cells(cellIndex).Style.BackColor = Color.Red
  59.                 Else
  60.                     row.Cells(cellIndex).Style.BackColor = Color.White
  61.                 End If
  62.             Next

  63.             '// เพิ่มแถวลงใน DataGridView
  64.             dgv.Rows.Add(row)
  65.         Next
  66.     End Sub
  67. End Class
คัดลอกไปที่คลิปบอร์ด

BookingRoom.png
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

2

กระทู้

4

โพสต์

52

เครดิต

Member

Rank: 2

เครดิต
52
 เจ้าของ| โพสต์ 2025-3-2 15:29:12 | ดูโพสต์ทั้งหมด

ขอบคุณมากครับ อาจารย์
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2025-4-28 05:38 , Processed in 0.118728 second(s), 6 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้