如何从数据库中选择数据并将其显示在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中