好的,我正在尝试做的是允许我在asp.net中的网络表单的用户从列表框中选择多个资源。当他们选择这些资产并按下选择按钮时,它会触发以下代码,该代码应该运行所选索引,查询数据库中的描述和资产标签,并使用这些值填充描述和资产标签框。通过这个我已经能够让它从数据库读取值并填充字段,但它只会填充第一个选定项目的值,它只会插入相同的值等于等于的次数收件箱中选择的项目数。我尝试使用当前代码来更好地运行索引,但似乎是失败了If语句而我无法弄清楚原因。任何帮助表示赞赏,谢谢大家!
Dim i As Integer
For i = 0 To lstAssets.GetSelectedIndices.Count
If lstAssets.Items(i).Selected = True Then
Dim str2 As String = lstAssets.Items(i).Value.ToString
Dim cs As New OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings("CSIWebUpd").ConnectionString)
Dim ds As String = cs.DataSource
Dim cn As OracleConnection = New OracleConnection("user id=webupd;password=webupd;data source=" + ds)
Dim sql As String = "SELECT description, tag FROM assets WHERE id = :id"
Dim cmd As New OracleCommand(sql, cn)
cmd.Parameters.Add(":id", OracleDbType.Varchar2).Value = str2
cmd.CommandType = CommandType.Text
cmd.BindByName = True
cn.Open()
Dim dr As OracleDataReader = cmd.ExecuteReader()
cmd.ExecuteNonQuery()
dr.Read()
desc = dr.GetString(0).ToString
ass = dr.GetString(1).ToString
If txtDescription.Text = Nothing Then
txtDescription.Text = dr.GetString(0).ToString
Else
txtDescription.Text = txtDescription.Text + Chr(13) + Chr(10) + dr.GetString(0).ToString
End If
If txtAsset.Text = Nothing Then
txtAsset.Text = dr.GetString(1).ToString
Else
txtAsset.Text = txtAsset.Text + Chr(13) + Chr(10) + dr.GetString(1).ToString
End If
cmd.Dispose()
cn.Close()
End If
Next i
UpdatePanel1.UpdateMode = UpdatePanelUpdateMode.Conditional
UpdatePanel1.Update()
答案 0 :(得分:0)
我会以这种方式使用SelectedIndices值
For Each i in lstAssets.GetSelectedIndices
现在我包含所选项目的索引而不是GetSelectedIndices数组的偏移量
GetSelectedIndices返回一个数组,其中数组的每个元素都是Items集合中您已选择项目的索引。
一个例子可以更好地解释:
假设选择的项目是1,5 6(Count = 3),您的代码将i的值设置为0,1,2然后使用该值来查找items集合中的ID,但是以下检查在lstAssets.Items(i).Selected
上找到了索引1处的项目。而是使用for each方法获得值1,5,6。