【发布时间】:2018-07-07 12:04:15
【问题描述】:
我正在尝试将数据网格视图 (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 都不会更新将“产品”表格提交给数据库。有什么推荐吗?
【问题讨论】:
-
您应该首先不要手动填充网格,而是简单地将
DataTable绑定到它。其次,您不应该将第二个表单中的数据保存到数据库中,然后尝试在第一个表单中再次取回它。第二种形式应该简单地收集数据并将其传递回第一种形式。然后第一个表单向DataTable添加一个新行,这将导致它出现在网格中。然后第一个表单将DataTable中的所有更改保存回数据库。
标签: vb.net