2013-01-02 30 views
2

我目前有一个巨大的IF语句,并希望尽量减少它。在VB中实现标签名称中的变量?

我有一个数据网格,我从SQL查询填充,然后从这个数据网格我将值传递到单独的标签。

我能够创建一个For Each循环,在该循环中,我循环查看变量,直到计数器达到7.但是,当我需要将标签名称值增加1时,会出现问题。每次,所以基本上我需要在标签名称中添加一个计数器变量。

,我需要最小化的代码是:

result73 = DataGridView1.Rows(0).Cells(0).Value.ToString 
result74 = DataGridView1.Rows(0).Cells(1).Value.ToString 
result75 = DataGridView1.Rows(1).Cells(0).Value.ToString 
result76 = DataGridView1.Rows(1).Cells(1).Value.ToString 
result77 = DataGridView1.Rows(2).Cells(0).Value.ToString 
result78 = DataGridView1.Rows(2).Cells(1).Value.ToString 
result79 = DataGridView1.Rows(3).Cells(0).Value.ToString 
result80 = DataGridView1.Rows(3).Cells(1).Value.ToString 
result81 = DataGridView1.Rows(4).Cells(0).Value.ToString 
result82 = DataGridView1.Rows(4).Cells(1).Value.ToString 
result83 = DataGridView1.Rows(5).Cells(0).Value.ToString 
result84 = DataGridView1.Rows(5).Cells(1).Value.ToString 
result85 = DataGridView1.Rows(6).Cells(0).Value.ToString 
result86 = DataGridView1.Rows(6).Cells(1).Value.ToString 
result87 = DataGridView1.Rows(7).Cells(0).Value.ToString 
result88 = DataGridView1.Rows(7).Cells(1).Value.ToString 

If result73 = "Monday" Then 
    DaySalesLbl1.Text = result74 
ElseIf result73 = "Tuesday" Then 
    DaySalesLbl2.Text = result74 
ElseIf result73 = "Wednesday" Then 
    DaySalesLbl3.Text = result74 
ElseIf result73 = "Thursday" Then 
    DaySalesLbl4.Text = result74 
ElseIf result73 = "Friday" Then 
    DaySalesLbl5.Text = result74 
ElseIf result73 = "Saturday" Then 
    DaySalesLbl6.Text = result74 
ElseIf result73 = "Sunday" Then 
    DaySalesLbl7.Text = result74 
End If 

这个if语句继续针对以上声明的每个变量。我创建

的循环看起来是这样的:

Dim cou As Integer 
Dim n As Integer 
cou = 0 
n = 1 
Do Until result74 <> "" 
    If result73 = cou Then 
     DaySalesLbl +n = result74 
    End If 
    cou = cou + 1 
    n = n + 1 
Loop 

但部分DaySalesLbl +n = result74带来了一个错误,因为它会查找生成的方法。

+0

这太好了,谢谢你的帮助。有效 :) –

回答

1

如果像我怀疑,这是一个WinForm项目,那么您可以通过名称使用Form.Controls集访问控制,象这样:

Dim cou As Integer 
Dim n As Integer 
cou = 0 
n = 1 
Do Until result74 <> "" 
    If result73 = cou Then 
     Dim l As Label = CType(Me.Controls("DaySalesLbl" & n), Label) 
     l.Text = result74 
    End If 
    cou = cou + 1 
    n = n + 1 
Loop 

Controls集合包含了所有直接子控件的形式。您可以通过索引(例如Me.Controls(0))或名称(例如Me.Controls("DaySalesLbl6"))访问它们。但是,集合将该列表存储为基类Control类型,因此在访问特定属性之前必须将其转换为特定类型。这就是为什么CType(..., Label)在这个例子中。

0

我会写出如下代码:

For i as Integer = 0 to 7 
    Select Case DataGridView1.Rows(i).Cells(1).Value.ToString 
    Case "Monday" 
     Me.Controls("DaySalesLbl" & i+1).Text = DataGridView1.Rows(i).Cells(2).Value.ToString 
    Case "Tuesday" 
     Me.Controls("DaySalesLbl" & i+2).Text = DataGridView1.Rows(i).Cells(2).Value.ToString 

    ... etc ... 

我这样做没有IDE,所以我希望我没惹什么,但我希望这将你在正确的方向和帮助。