数据读取器到数据源正常,但数据网格视图仅显示 1 行



我有一个datagridview(带有bindingsource,master的细节(,它是从datareader以编程方式填充的。数据读取器成功检索所有数据并将新行添加到绑定源。但是,数据网格视图仅显示一行。因此,在数据网格视图中,它显示来自数据读取器的最后一行。

当我从绑定导航器(主控版(单击"上一步"按钮时,所有行都显示在数据网格视图中,就好像它正在刷新绑定源并将每一行绑定到每个数据网格视图行一样。我知道我在这里错过了一些东西,但不确定它是什么。

Private Sub PopulateDetails(ByVal orderno As String)
Dim cmd As New SqlClient.SqlCommand
Dim dr As SqlClient.SqlDataReader
LoadDB()
If Not con.State = ConnectionState.Open Then
con.Open()
End If
cmd.CommandText = "select orderid, pono, cono, styleno, fabriccodeid, custfabriccode, colorid, orderqty, totalbales, uomid, width, " &
"weightperarea, yard, gramperyard, size, unitprice, currencycode, deliverydt, remark from tblorderdetails " &
"where orderno = @orderno;"
cmd.Connection = con
cmd.Prepare()
cmd.Parameters.AddWithValue("@orderno", orderno)
dr = cmd.ExecuteReader
With dr
If .HasRows() Then
Dim newRow As DataRowView
While .Read
newRow = DirectCast(TblorderdetailsBindingSource.AddNew(), DataRowView)
newRow.BeginEdit()
newRow.Row.BeginEdit()
newRow.Row("orderno") = OrdernoTextBox.Text
newRow.Row("pono") = .Item("pono")
newRow.Row("cono") = .Item("cono")
newRow.Row("styleno") = .Item("styleno")
newRow.Row("fabriccodeid") = .Item("fabriccodeid")
newRow.Row("custfabriccode") = .Item("custfabriccode")
''newRow("btncolor") = .Item("colorid")
newRow.Row("orderqty") = .Item("orderqty")
newRow.Row("totalbales") = .Item("totalbales")
newRow.Row("uomid") = .Item("uomid")
newRow.Row("width") = .Item("width")
newRow.Row("weightperarea") = .Item("weightperarea")
newRow.Row("yard") = .Item("yard")
newRow.Row("gramperyard") = .Item("gramperyard")
newRow.Row("size") = .Item("size")
newRow.Row("unitprice") = .Item("unitprice")
newRow.Row("currencycode") = .Item("currencycode")
newRow.Row("deliverydt") = .Item("deliverydt")
newRow.Row("remark") = .Item("remark")
newRow.Row.EndEdit()
newRow.DataView.Table.Rows.Add(newRow.Row)
End While
End If
.Close()
End With
con.Close()
End Sub

这是非常错误的,错误的方式。 调用ExecuteReader后,只需调用DataTableLoad方法并通过数据读取器即可。 这将添加所有行甚至列(如果它们还没有(。 或者,使用数据适配器并调用其Fill方法,将DataTable作为参数传递。 相同的结果。

我已经工作了 4 天,寻找在 datagridview 中显示所有行的方法,最后通过以下方式解决它:

TblorderBindingSource.MovePrevious()
TblorderBindingSource.MoveNext()

显然,绑定源需要由绑定导航器以某种方式刷新,然后只有它显示数据网格视图中所有添加的行(自动生成的列 ID 为 -1,-2,-3...(。用户可以修改这些行然后保存。

我很遗憾这似乎不是一个"智能"的解决方法,但很高兴它以某种方式工作。

最新更新