Vb.net 根据MS Access数据库中的值更改按钮背面颜色
我正在尝试使用MS Access作为数据库来制作一个酒店管理系统。我可以创建登录、注册、签入、签出表单,但我正在尝试一些新的东西 在我的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的按钮 我希望我的按钮返回颜色根据数据库值而改变
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
。您可以对字符串值使用这些值。我这样做是为了不必担心帽子的问题。例如,该值可能是“可用”的,如果您正在检查“可用”,则永远不会达到该值。通过显式地将值设置为小写,我不再需要担心这个问题@希德