对于循环 - 某些情况我很难找到

时间:2017-07-17 19:00:20

标签: vb.net

我需要遍历一个表并检查是否有4行,其中特定列包含1到4个值。

表格示例:

| cty | st | val |

| 03 | 23 | 1 |

| 03 | 23 | 2 |

| 03 | 23 | 3 |

| 03 | 23 | 4 |

我需要检查列val是否包含1-4值。该表将始终按val ASC排序,但该表可能并不总是包含所有4个值。如果此表中不存在1 - 4,则需要向用户发出错误消息。 (不是问题)。

我的问题是检查此问题的循环逻辑。

我尝试了几种不同的方法,这就是我目前所拥有的并不能完全满足我所寻找的目标。

For i As Integer = 1 To 4 Step 1
    For Each dr As DataRow In dt.Rows

        'if not all 4 growing season per county are entered, show error message
        If i <> dr("grows") Then

            FillErrorResultObject("ERROR00139", "", "", strCountyName, "", "", "", "", "", dtErrorTable, objErrorResult)
            blnError = True
            Exit For

        End If

    Next
    If blnError = True Then Exit For
Next

****编辑 - &#39; val&#39;在我的示例表中,与“增长”相同的列在代码示例中。我想把它保留原样,然后添加这个评论。

1 个答案:

答案 0 :(得分:1)

由于您需要知道表中是否存在所有四个值,因此您需要跟踪这四个值以查看它们是否存在。您可以使用字典:

Dim d As New Dictionary(Of Integer, Boolean)
For i As Integer = 1 To 4
  d.Add(i, False)
Next

For Each dr As DataRow In dt.Rows
  Dim v As Integer = Convert.ToInt32(dr("Grows"))
  If d.ContainsKey(v) Then
    d(v) = True
  End If
Next

Dim showError As Boolean = False
For Each kvp As KeyValuePair(Of Integer, Boolean) In d
  If Not kvp.Value Then
    showError = True
  End If
Next
If showError Then
  MessageBox.Show("Error")
End If