从列表框中读取多个项目以查询数据库中的信息

时间:2014-01-17 16:17:43

标签: asp.net sql database oracle listbox

好的,我正在尝试做的是允许我在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()

1 个答案:

答案 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。