从其他形式更新DGV

时间:2018-07-07 12:04:15

标签: vb.net

我正在尝试将数据网格视图(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的“产品”表格。有什么建议吗?

1 个答案:

答案 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

但是,如果数据很少,则几乎没有差异。