根据 MS Access 数据库中的值更改按钮背景色

Change button back color based on value in MS Access database

我正在尝试使用 MS Access 作为数据库制作酒店管理系统。我能够创建登录、注册、签到、签出表单,但我正在尝试一些新的东西。

在我的 MS Access 数据库中,我有一个名为 rooms 的 table,其中包含 Roomnumber("number",包含以下内容:201,202,203) Roomtype(包含以下内容的短文本:标准房、双人房、家庭房) 和 Status(包含以下内容的短文本:可用、已占用、已保留)。

在我的表单中,我有名为 btn201btn202btn203 的按钮。

我希望我的按钮背景颜色根据数据库的值而改变。

示例:

If the Status of Roomnumber "201" is "available" btn201 backcolor = green
If the Status of Roomnumber "201" is "Occupied" btn201 backcolor = red

这是我的代码:

Imports System.Data.OleDb

Public Class Homepageform

Dim provider As String
Dim datafile As String
Dim connString As String
Dim myConnection As OleDbConnection = New OleDbConnection

Private Sub Homepageform_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


 provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source ="

    'access location
    datafile = "C:\Users\RM\Desktop\GPSinVS\GuestProSystem\GuestProSystem\guestprosystemdatabase.accdb"
    connString = provider & datafile
    myConnection.ConnectionString = connString


    myConnection.Open()
    Dim cmd As New OleDbCommand("Select  [Roomnumber],[Status] FROM [rooms]", myConnection)
    Dim dt As New DataTable
    dt.Load(cmd.ExecuteReader)

    For Each row As DataRow In dt.Rows

        Select Case row("Roomnumber").ToString()

            Case "201"
                Select Case row("Status").ToString().ToLower()

                    Case "Available"
                        btn201.BackColor = Color.Green

                    Case "Occupied"
                        btn201.BackColor = Color.Red

                    Case Else
                        btn201.BackColor = Color.Black

                        cmd.ExecuteNonQuery()

                End Select
        End Select
    Next
    myConnection.Close()

End Sub

编辑。

我已经根据@Bugs 的回答实现了代码。

没有错误,但是 btn201 背景颜色变成黑色,但是在我的 MS Access 数据库中 Roomnumber=201Status=Available 所以它应该是绿色的。

我试过删除 Case Else 和 运行 但颜色没有变化。

就我个人而言,我更喜欢使用 DataTable 来处理我的数据,因此我的代码将倾向于基于此的解决方案。

首先,我会将您的 SELECT 语句更改为不使用通配符 *。这是不好的做法。而是指定您希望包含的列。我也会删除过滤器:

"Select [Roomnumber], [Roomtype], [Status],  FROM [rooms]"

我们现在可以看看将这些数据放入 DataTable 并循环遍历 Rows 集合:

Dim dt As New DataTable
dt.Load(cmd.ExecuteReader)

For Each row As DataRow In dt.Rows

    Select Case row("Roomnumber").ToString()

        Case "201"
            Select Case row("Status").ToString().ToLower()

                Case "available"
                    btn201.BackColour = Color.Green

                Case "occupied"
                    btn201.BackColour = Color.Red

            End Select

        Case "202"
            Select Case row("Status").ToString().ToLower()

                Case "available"
                    btn202.BackColour = Color.Green

                Case "occupied"
                    btn202.BackColour = Color.Red

            End Select

    End Select

Next

我会为 "available" 和 "occupied" 使用常量,并在 Case 语句中使用这些常量。

这样做的缺点是语句可能会变得越来越长,具体取决于您拥有的按钮数量。可能有另一种方法来管理它,但希望这会有所帮助。