根据 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
(包含以下内容的短文本:可用、已占用、已保留)。
在我的表单中,我有名为 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
和 运行 但颜色没有变化。
就我个人而言,我更喜欢使用 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
语句中使用这些常量。
这样做的缺点是语句可能会变得越来越长,具体取决于您拥有的按钮数量。可能有另一种方法来管理它,但希望这会有所帮助。
我正在尝试使用 MS Access 作为数据库制作酒店管理系统。我能够创建登录、注册、签到、签出表单,但我正在尝试一些新的东西。
在我的 MS Access 数据库中,我有一个名为 rooms
的 table,其中包含 Roomnumber
("number",包含以下内容:201,202,203)
Roomtype
(包含以下内容的短文本:标准房、双人房、家庭房)
和 Status
(包含以下内容的短文本:可用、已占用、已保留)。
在我的表单中,我有名为 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
和 运行 但颜色没有变化。
就我个人而言,我更喜欢使用 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
语句中使用这些常量。
这样做的缺点是语句可能会变得越来越长,具体取决于您拥有的按钮数量。可能有另一种方法来管理它,但希望这会有所帮助。