VB.net Foreach 不递增

VB.net Foreach doesn't increment

我有一个 gridview,当且仅当 gridview 中的复选框被选中时,它才会发送电子邮件。

我的 gridview 循环工作正常;但是,当我在数组循环中逐行调试时,很明显 i 永远不会从 0.

增加

如您所见,我什至尝试增加 i,但这也无济于事 [我知道我不应该增加 i,但我想尝试一下]。

有什么建议吗?

全局变量:

Public arrayLength As Integer

Public email_list As String() = New String(arrayLength) {}

循环:

'set array length
For Each gvrow As GridViewRow In DisplaySup.Rows

   If gvrow.RowType = DataControlRowType.DataRow Then

     Dim chkRow As CheckBox = TryCast(gvrow.Cells(0).FindControl("SelectUser"), CheckBox)

        If chkRow.Checked Then
                count = count + 1

        End If
  End If
Next

'update public variable
arrayLength = count

For Each gvrow As GridViewRow In DisplaySup.Rows
    Dim CheckBox1 As CheckBox = DirectCast(gvrow.FindControl("SelectUser"), CheckBox)

    For Each row As GridViewRow In DisplaySup.Rows
        For i As Integer = 0 To email_list.Length - 1

           If row.RowType = DataControlRowType.DataRow Then

             Dim chkRow As CheckBox = TryCast(row.Cells(0).FindControl("SelectUser"), CheckBox)

              If chkRow.Checked Then

                 oneProvided = True

                 Dim v_comp As String = row.Cells(2).Text.ToString()

                 strSearch = "Select email_val from table_name where company = '" & v_comp & "'"

                 Dim SupStr As OleDbCommand = New OleDbCommand(strSearch, conn)
                 Dim OracleDataAdapterAds As OleDbDataAdapter = New OleDbDataAdapter
                 OracleDataAdapterAds.SelectCommand = SupStr
                 Dim DsAds As DataSet = New DataSet
                 DsAds.Clear()
                 OracleDataAdapterAds.Fill(DsAds, "table_name")

                 email = DsAds.Tables(0).Rows(0).Item(0)
                 email_list(i) = email
                'i = i + 1

             End If

        End If

   Next
Next

您定义全局变量并在程序启动时对其进行初始化,然后在循环之前更改 arrayLength。然而,这个 不会 重新初始化你的 email_list - 它已经在内存中分配了。如果您想更改大小,则必须重新初始化它。

最好只定义你的数组而不初始化,然后只在你想使用它时才初始化它。

在你的全局中你应该有:

Public arrayLength As Integer
Public email_list As String()

注意:您可以仍然在这里初始化它,但是如果您要在使用它之前重新初始化它是没有意义的。鉴于这就是你正在做的,这些都不应该是全局变量,但这是另一个问题和答案。

然后在你的代码中,像这样:

arrayLength = count
email_list  = New String(arrayLength) {}

找到我需要的一行代码。

array_Length = count 之后我放置了行 ReDim email_list(arrayLength) 并且它更新了长度。刚刚得知 ReDim 重新分配 space.