如何从数据库中选择数据并将其显示在gridview的新行上

Posted

技术标签:

【中文标题】如何从数据库中选择数据并将其显示在gridview的新行上【英文标题】:How to select data from database and display it on the new row of gridview 【发布时间】:2014-05-20 06:40:20 【问题描述】:

我正在尝试使用文本框从数据库中选择数据并将其显示在 gridview 的新行上。文本框将使用条形码扫描仪输入。我只需要扫描条形码然后在数据库中搜索数据并将其添加到gridview的新行中。它将使用 ontextchange 事件执行。

到目前为止,这是我的代码:

Private Sub selectData(ByVal rowcount As Integer)
   sql = "Select Barcode, Name  from tbl_barcode where [Barcode] = '" + txtScanBarcode.Text + "'"
    cmd = New SqlCommand(sql, con)   

    drDataReader = cmd.ExecuteReader
    While (drDataReader.Read())
        dtDatatable.Columns.Add(New System.Data.DataColumn("Barcode", GetType([String]))) '0
        dtDatatable.Columns.Add(New System.Data.DataColumn("Name", GetType([String]))) '1

        If Session("CurrentData") IsNot Nothing Then
            For i As Integer = 0 To rowcount
                dtDatatable = DirectCast(Session("CurrentData"), DataTable)
                If dtDatatable.Rows.Count > 0 Then
                    dr = dtDatatable.NewRow()
                    dr(0) = "Barcode"
                    dr(1) = "Name"
                End If
            Next
            dr = dtDatatable.NewRow()
            dr(0) = "Barcode"
            dr(1) = "Name"
            dtDatatable.Rows.Add(dr)
        Else
            dr = dtDatatable.NewRow()
            dr(0) = "Barcode"
            dr(1) = "Name"
            dtDatatable.Rows.Add(dr)
        End If


    End While
      If Session("CurrentData") IsNot Nothing Then
        dtDatatable.Load(drDataReader)
        GridView1.DataSource = DirectCast(Session("CurrentData"), DataTable)
        GridView1.DataBind()
    Else
          dtDatatable.Load(drDataReader)
        GridView1.DataSource = dtDatatable
        GridView1.DataBind()
    End If
     Session("CurrentData") = dtDatatable

End Sub

Protected Sub txtScanBarcode_TextChanged(sender As Object, e As EventArgs) Handles txtScanBarcode.TextChanged

      If Session("CurrentData") IsNot Nothing Then
        Dim dt As DataTable = DirectCast(Session("CurrentData"), DataTable)
        Dim count As Integer = dt.Rows.Count
        selectData(count)
      Else
        selectData(1)
      End If
End Sub

以上代码,可以添加新行但不能从数据库中获取数据。当我执行它并扫描条形码时,它不会显示数据库中的数据,而是在 dr(0) 上添加文本“条形码”,在 dr(1) 上添加文本“名称”。所以,我认为从数据库中获取数据的 sql 不起作用。它不会从数据库中调用任何数据。 您有什么建议,如何从数据库中选择数据并将其提取到行中?

提前致谢。不过我真的很感激。

【问题讨论】:

您可能需要查看查询的参数。 谢谢本。你有关于如何在我的问题上使用参数的链接或来源吗? jmcilhinney.blogspot.com.au/2009/08/… 【参考方案1】:

尽量不要使用 reader,使用 DataSet 然后获取 Data 就可以了

Public Function getDataInDB(ByVal sQuery As String) As String
    getDataInDB = Nothing
    Try
        CMD = New SqlCommand(sQuery, TestResult)
        Dim sqlAdapter As SqlDataAdapter
        Dim dataS As DataSet
        sqlAdapter = New SqlDataAdapter(CMD)
        dataS = New DataSet
        sqlAdapter.Fill(dataS, "getRecord")
        getDataInDB = dataS.Tables("getRecord").Rows(0).ItemArray(0).ToString()
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Function

通过不使用阅读器,获取这样的数据会更加安全和快速......

【讨论】:

您是否介意指导我使用您的建议。老实说,我不知道如何使用和调用函数。这对我来说是新的。对不起...我在里面添加了sql尝试将“getRecord”更改为“Barcode”...那我如何将它设置为gridview? 我的代码只是为了获取您需要的单个数据,例如: Dim Barcode As String = getDataInDB("SELECT SOMETHING THAT I WANT TO GET") 输出: Barcode is USBN00000001 然后您可以将其添加到您的新的 datagridview 包括你的一些数据 亲爱的 Vipa,我尝试了你的建议。它是这样的: Private Sub selectData2() sql = getDataInDB("Select Barcode, Name from tbl_barcode where [Barcode] = '" + txtScanBarcode.Text + "'") GridView1.DataSource = sql GridView1.DataBind() End Sub然后我在 ontextchange 事件上调用 selectdata2() ......但它说'在所选数据源上找不到名为'条形码'的字段或属性'。我做错了吗? 你想在(Databind)中的DataGridView中显示结果还是只在变量上获取结果? 我想在gridview中显示结果...例如:我在txtscan条码上扫描001...然后它将显示名称和条码001...然后我在txtscan条码上再次扫描002,它将显示在001之后的下一行......像这样:条形码名称001一002二....等

以上是关于如何从数据库中选择数据并将其显示在gridview的新行上的主要内容,如果未能解决你的问题,请参考以下文章

从返回类型 DataSet 获取输出并将其显示在 Gridview 中

从返回类型DataSet获取输出并将其显示在Gridview中

如何裁剪图像并将其存储在 gridview 中?

我想从数据库表中选择最后 5 个条目并将其显示在页面上。如何使用 JSP 实现它?

从数据库中选择数据并将其显示到表单中[关闭]

php mysql 选择数据到gridview