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.
我有一个 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.