Vb.net 根据MS Access数据库中的值更改按钮背面颜色

Vb.net 根据MS Access数据库中的值更改按钮背面颜色,vb.net,ms-access-2013,Vb.net,Ms Access 2013,我正在尝试使用MS Access作为数据库来制作一个酒店管理系统。我可以创建登录、注册、签入、签出表单,但我正在尝试一些新的东西 在我的MS Access数据库中,我有一个名为rooms的表,其中有Roomnumber(“number”由以下内容组成:201202203) Roomtype(由以下内容组成的短文本:标准、双人、家庭) 和状态(由以下内容组成的短文本:可用、占用、保留) 在我的表单中,我有名为btn201、btn202和btn203的按钮 我希望我的按钮返回颜色根据数据库值而改变

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

在我的MS Access数据库中,我有一个名为
rooms
的表,其中有
Roomnumber
(“number”由以下内容组成:201202203)
Roomtype
(由以下内容组成的短文本:标准、双人、家庭) 和
状态
(由以下内容组成的短文本:可用、占用、保留)

在我的表单中,我有名为
btn201
btn202
btn203
的按钮

我希望我的按钮返回颜色根据数据库值而改变

例如:

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=201
Status=Available
中,背景色应为绿色


我已尝试删除
Case Else
并运行它,但没有改变颜色。

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

首先,我要将您的
SELECT
语句更改为不使用通配符
*
。这是个坏习惯。而是指定要包含的列。我还将移除过滤器:

"Select [Roomnumber], [Roomtype], [Status],  FROM [rooms]"
现在,我们可以查看如何将这些数据放入
数据表
,并在
集合中循环:

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
我将使用常量表示“可用”和“占用”,并在
Case
语句中使用这些常量


这样做的缺点是语句可能会越来越长,这取决于您有多少个按钮。可能有另一种管理方法,但希望这会有所帮助。

Case“available”
而不是
Case“available”
。我这样做
ToString().ToLower()
。注意
.ToLower()
的用法。我这样做是为了我们不必担心上限@我也不确定你为什么要调用
cmd.ExecuteNonQuery()
,那里不需要那一段代码@我的天哪!因此,我可以使用.ToLower,即使在我的数据库MS Access中,我的Status=“Available”的第一个字母是大写。我想我只需要复制数据库中的内容。。。不管怎样,它成功了!!!非常感谢你@Bugs
.ToLower
将任何值设置为所有小写。相反的是
.ToUpper
。您可以对
字符串
值使用这些值。我这样做是为了不必担心帽子的问题。例如,该值可能是“可用”的,如果您正在检查“可用”,则永远不会达到该值。通过显式地将值设置为小写,我不再需要担心这个问题@希德