2

我目前有一个巨大的 IF 语句,并希望尽可能地减少它。

我有一个从 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会带来一个错误,因为它会查找生成的方法。

4

2 回答 2

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)示例中存在的原因。

于 2013-01-02T17:37:20.147 回答
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 的情况下做到了这一点,所以我希望我没有搞砸任何事情,但我希望这能让您朝着正确的方向前进并有所帮助。

于 2013-01-02T17:42:31.437 回答