我正在尝试将数据网格视图(DGV)从一种形式更新为另一种形式。初始形式称为“库存”,在其中我们找到一个带有产品的组合框和一个DGV,该DGV包含具有相应金额(意思是2列)的产品
我可以选择添加带有“库存”形式的按钮的新产品。代码是:
Private Sub btnProducto_Click(sender As Object, e As EventArgs) Handles btnProducto.Click
Dim productos As New Productos(Me)
productos.Show()
End Sub
一方面,在“产品”表单中,只是一个新产品名称的文本框,其中包含一个要保存在数据库中的按钮。此外,我更新了“库存”表格的DGV
Public Sub New()
InitializeComponent()
End Sub
Public Sub New(stock As stock)
Me.New()
_stock = stock
End Sub
Private Sub btnProducto_Click(sender As Object, e As EventArgs) Handles btnProducto.Click
Dim stock As New stock
oBaseDatos = New CLSoledb("bd.accdb")
oBaseDatos.Insertar_Servicio(txtProducto.Text, 2)
_stock.rellenarProductosDGV()
Me.Close()
End Sub
在“库存”形式中,特别是在负载中,我调用方法“ rellenarProductosDGV”(),该方法毫无问题地将信息添加到DGV中。从“产品”表单中添加产品,并使用:
_stock.rellenarProductosDGV()
如果我将messagebox.show(“ test”)放入,它将仅填充DGV。如果我推迟了消息框,则“库存”表格的DGV不会更新,当重新加载“库存”负荷时,将保留相同的产品。这是原始方法:
Public Sub rellenarProductosDGV()
MessageBox.Show("test")
oBaseDatos = New CLSoledb("autovag.accdb")
DSProductos = New DataSet
dgvStock.Rows.Clear()
Dim SentenciaSQL As String = "select nombre,cantidad from ser_Pro where tipo=2"
DSProductos = oBaseDatos.AccionSelect(SentenciaSQL)
For f = 0 To DSProductos.Tables(0).Rows.Count - 1
dgvStock.Rows.Add()
For c = 0 To 1
dgvStock.Item(c, f).Value = DSProductos.Tables(0).Rows(f).Item(c)
Next
Next
End Sub
我了解到这可能是与执行时间有关的任何问题,因为当程序在消息框中停止时,它可以完成任务,相反,DGV不会更新,无论从中添加了什么产品。 DB的“产品”表格。有什么建议吗?
答案 0 :(得分:0)
如果要添加新行,请执行.add或.insert,但请同时添加数据。
赞:
DGV.Rows.Add(value1,value2,...,n) 'each value will then be in one column
您还可以使用DataTable,因为它速度更快,例如直接向DGV创建10.000行大约需要1500ms,而将它们添加到DataTable并将其绑定到DGV需要大约35ms
但是,如果数据很少,则几乎没有差异。