【问题标题】:Update DGV from other form从其他形式更新 DGV
【发布时间】: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


【解决方案1】:

如果您想添加新行,您可以使用 .add 或 .insert,但请同时添加数据。

像这样:

DGV.Rows.Add(value1,value2,...,n) 'each value will then be in one column

您也可以使用 DataTable,因为它更快,例如,将 10.000 行直接添加到 DGV 大约需要 1500 毫秒,而将它们添加到 DataTable 并将其绑定到 DGV 需要大约 35 毫秒

但如果数据很少,则几乎没有区别。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    • 2020-04-17
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多