2014-11-20 40 views
0

我目前在Windows窗體應用程序中使用vb.net express 2013。我通過SQL查詢創建了「單元格位置」列表。我有84按鈕,設計命名爲cmdM01,cmdM02,....,cmd84。我正在運行一個循環來將所有按鈕變成綠色,並且我想將用於查詢sql查詢的按鈕變爲紅色。除了我相信的一行外,我擁有一切。有人可以幫助我控制線嗎?我需要任何名稱與SQL查詢返回的按鈕變成紅色的按鈕。使用SQL Server數據表更改按鈕的背景顏色,按按鈕名稱引用

 Dim ctr As Control 
    Try 
     Using conn1 As New SqlConnection(connstring) 
      conn1.Open() 
      Using comm1 As New SqlCommand("SELECT LocID from Production.dbo.tblFabWipID Left Join Production.dbo.tblFabWiplog ON tblFabWipID.FabWipID = tblFabWipLog.fabwipid WHERE CheckedIN IS NOT NULL AND CheckedOut is NULL", conn1) 
       Dim sql As New SqlDataAdapter(comm1) 
       Dim dt As New DataTable 
       sql.Fill(dt) 
       For Each ctr In PanelButtons.Controls 
        If TypeOf ctr Is Button Then 
         ctr.BackColor = Color.Green 
         For Each row In dt.Rows 
          Me.Controls("cmd" & Button.BackColor.red) 
         Next 
        End If 

       Next 
      End Using 
     End Using 

    Catch ex As Exception 
     MsgBox("Error loading button identification during load event, please contact ") 
     MsgBox(ex.ToString) 

    End Try 
+0

PS。每個按鈕都是一個單元格位置。 – Cheddar 2014-11-20 18:17:36

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-11-20 18:21:24

+0

2個重要問題:「LocId」是你的控件名稱的其餘部分(即M01,M02,84)?其次,你是否期望你的選擇返回多個記錄或只有1個? – Steve 2014-11-20 18:44:32

回答

1

你需要在這兩種情況下使用PanelButtons.Controls,並使用LocID從每個DataRow形成對照的名字。循環也不需要嵌套。

For Each ctr In PanelButtons.Controls 
    If TypeOf ctr Is Button Then 
     ctr.BackColor = Color.Green 
    End If 
Next 
For Each row In dt.Rows 
    Dim btn = PanelButtons.Controls("cmd" & row("LocID")) 
    If btn IsNot Nothing Then 
     btn.BackColor = Color.Red 
    End If 
Next 
+0

作品!我明白了現在的工作方式,感謝Mark的教訓。 – Cheddar 2014-11-20 20:10:17