2017-03-16 10 views
2

の値に基づいて、バックの色。私はログイン、登録、チェックイン、フォームのチェックアウトを作成することができましたが、私には何か新しいことを試しています。 Roomtype(以下で構成され、短いテキスト:スタンダード、ダブル、ファミリー):私のMS Accessデータベースで変更]ボタンMS Accessデータベース

私はroomsという名前のテーブルを持っており、それの内部はRoomnumber(201202203次から構成され、「数」)です および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

''利用可能 ""ではない "ケース"利用可能 "です。私はこのToString()、ToLower()を行います。 '.ToLower()'の使用に注意してください。私はこれを行うので、キャップについて心配する必要はありません。 @sid – Bugs

+0

また、 'cmd.ExecuteNonQuery()'を呼び出す理由がわかりません。そのコードは必要ありません。 @sid – Bugs

+1

ああ、私!だから私は使用することができます.ToLower私のデータベースのMS Accessの最初の文字が私のステータス= "利用可能"の大文字の場合です。私は私のデータベースに何をコピーする必要があると思った...とにかくそれは働いた!どうもありがとうございます! @Bugs – sid

関連する問題