我有一个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
答案 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
重新分配空间。