我目前有一个巨大的IF声明,并希望尽可能减少它。
我有一个数据网格,我从SQL查询填充,然后从这个数据网格我将值传递给单独的标签。
我能够创建一个For Each循环,在其中循环查看变量直到计数器达到7.但是当我需要将Label名称值增加1时出现问题。每次,基本上我都需要在Label名称中添加一个计数器变量。
我需要最小化的代码是:
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)
的原因。
答案 1 :(得分: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的情况下做到了这一点,所以我希望我没有弄乱任何东西,但我希望这能让你朝着正确的方向前进并提供帮助。