2017-03-16 165 views
2

我正在嘗試使用MS Access作爲數據庫來製作酒店管理系統。我能夠創建登錄,註冊,簽入,簽出表格,但我嘗試了一些新的東西給我。根據MS Access數據庫中的值更改按鈕的背景顏色

在我的MS Access數據庫中,我有一個表,名爲rooms和它裏面是Roomnumber(「數字」是由以下部分組成:201,202,203) Roomtype(短文本包括以下內容:標準雙人間,家庭) 和Status(短文本包含以下內容:可用,已佔用,保留)。

在我的表單中,我的按鈕名稱爲btn201,btn202btn203

我希望我的按鈕背景顏色根據數據庫的值進行更改。

例子:

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並運行它,但沒有顏色變化。

回答

3

我個人更喜歡使用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 

我會用常量「可用」和「佔領「並在Case聲明中使用這些常量。

這樣做的缺點是,根據您有多少個按鈕,陳述可能會變得越來越長。可能有其他方法來管理這個,但希望這應該有所幫助。

+0

'Case'available''not'Case「Available」'。我這樣做ToString()。ToLower()'。注意使用'.ToLower()'。我這樣做是爲了讓我們不必擔心帽子。 @sid – Bugs

+0

另外我不確定你爲什麼要調用'cmd.ExecuteNonQuery()'這一點代碼不是必需的。 @sid – Bugs

+1

哦,我的!所以我可以使用.ToLower,即使在我的數據庫MS訪問我的Status =「Available」的第一個字母是更高的情況。我以爲我只需要複製什麼在我的數據庫...反正它的工作!非常感謝! @Bugs – sid

相關問題