VB.net Foreach不会增加

时间:2015-11-03 13:43:08

标签: .net vb.net foreach initialization 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

2 个答案:

答案 0 :(得分:1)

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

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

在全球范围内你应该:

Public arrayLength As Integer
Public email_list As String()

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

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

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

答案 1 :(得分:0)

找到了我需要的一行编码。

array_Length = count之后我放行ReDim email_list(arrayLength)并更新了长度。刚刚得知ReDim重新分配空间。