从数据库中搜索数据并显示在未绑定但预定义的列Datagridview VB.Net中

从数据库中搜索数据并显示在未绑定但预定义的列Datagridview VB.Net中,vb.net,search,datagridview,Vb.net,Search,Datagridview,我想从SQL数据库中搜索数据,并显示在datagridview的预定义列中。我使用了以下代码:- For i As Integer = 0 To DataGridView1.Rows.Count - 1 qry = "select * from Transs where DocNo='" & TextBox1.Text & "'" cmd = New SqlCommand(qry, con) con.Open()

我想从SQL数据库中搜索数据,并显示在datagridview的预定义列中。我使用了以下代码:-

For i As Integer = 0 To DataGridView1.Rows.Count - 1
    qry = "select * from Transs where DocNo='" & TextBox1.Text & "'"
    cmd = New SqlCommand(qry, con)
    con.Open()
    cmd.ExecuteNonQuery()
    dr = cmd.ExecuteReader
    If dr.Read Then

        ComboBox1.Text = dr("CostCenter")
        TextBox2.Text = dr("TransactionID")
        DataGridView1.Rows(i).Cells(0).Value = dr("AccountID")
        DataGridView1.Rows(i).Cells(1).Value = dr("AccountName")
        DataGridView1.Rows(i).Cells(2).Value = dr("AccountType")
        DataGridView1.Rows(i).Cells(3).Value = dr("Debit")
        DataGridView1.Rows(i).Cells(4).Value = dr("Credit")
        DataGridView1.Rows(i).Cells(5).Value = dr("Text")
    End If
Next
con.Close()

但问题是我只在datagridview的第一行获取数据。这段代码中的错误在哪里?

您的循环是反向的(您需要循环DataReader结果,而不是DataGridView行)--删除
cmd.ExecuteOnQuery()
--创建一个DataTable,用
DataTable.load(cmd.ExecuteReader())加载它
,然后将DataTable分配给DataGridView和ComboBox的数据源,并将其displaymber设置为“CostCenter”。将数据绑定添加到文本框,绑定
Text
TransactionID
。使用命令参数,删除字符串连接。将连接声明到位,并在与命令一起使用后将其丢弃。仔细检查
DocNo
是否为字符串类型[…更多…]。在运行此代码之前,DataGridView中是否已存在行?数据库中DocNo的数据类型是什么?为什么要在循环中反复执行相同的查询?在循环过程中,您是否希望TextBox1.Text的值发生更改?如果需要在循环中运行查询,请使用字符串连接上的参数来生成sql命令。您将获得相当大的性能提升。正如Mary所建议的,sql在循环的上下文中是静态的,所以将其移出循环是安全的