【问题标题】:Calculating a field from two different tables and show in a DatagridView从两个不同的表中计算一个字段并显示在 DatagridView 中
【发布时间】:2014-10-30 16:34:56
【问题描述】:

我需要一个解决方案。我想从一个表中减去/添加另一个字段值。我正在提供详细信息。

我有两个表(结构相同)。

Table1 - purchase 字段:id, purchase_from, product_name, quantity, rate

表 2 - sales 字段:id, sale_to, product_name, quantity, rate

现在我想将purchase 表中的数量减去sales 表并将数据显示到datagridview 中。

我尝试过,但失败了。我给你代码sn-p。

Dim PurchasePrdName, SalesPrdName As String Dim PurchaseQty, SalesQty As Double

Private Sub LoadPurchase()

    Try
        OpenConnection()
        Dim dcommand As New MySqlCommand
        Dim qry As String = "SELECT ProductName,SUM(Quantity) FROM stockitems GROUP BY ProductId"
        dcommand.Connection = conn
        dcommand.CommandText = qry

        Dim dbread As MySqlDataReader = dcommand.ExecuteReader
        DataGridView1.Rows.Clear()
        While dbread.Read
            If dbread.HasRows Then
                PurchasePrdName = dbread("ProductName").ToString
                PurchaseQty = dbread("SUM(Quantity)").ToString
            End If
        End While
        dbread.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        CloseConnection()
    End Try

End Sub

Private Sub LoadSales()

    Try
        OpenConnection()
        Dim dcommand As New MySqlCommand
        Dim qry As String = "SELECT SUM(Quantity) FROM salesitems WHERE ProductName='" & PurchasePrdName & "' GROUP BY ProductId"
        dcommand.Connection = conn
        dcommand.CommandText = qry

        Dim dbread As MySqlDataReader = dcommand.ExecuteReader
        DataGridView1.Rows.Clear()
        While dbread.Read
            If dbread.HasRows Then
                SalesQty = dbread("SUM(Quantity)").ToString
            End If
        End While
        dbread.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        CloseConnection()
    End Try

    End Sub

然后将此数据加载到 DataGridView...

Private Sub LoadData() Try LoadPurchase() LoadSales() Dim PrdName As String = PurchasePrdName Dim Qty As Double = PurchaseQty - SalesQty DataGridView1.Rows.Add(PrdName, Qty) DbGridCustomize() Catch ex As Exception MsgBox(ex.Message) End Try End Sub

但它只显示表中的一种产品。我很困惑为什么!!!

你能帮帮我吗???

我会非常感谢你

【问题讨论】:

    标签: mysql vb.net datagridview


    【解决方案1】:

    您只向网格添加一行,即分配给 PurchasePrdName 的产品。您要么需要将一组值绑定到网格,要么需要遍历一组值。似乎您在这里所做的只是将单个值分配给变量,然后将一行添加到网格中:

    DataGridView1.Rows.Add(PrdName, Qty)
    

    编辑:

    我会将您的变量 PurchasePrdName 和 SalePrdName 更改为一个集合,因为您希望在此处存储多个值。

    Private PurchasePrdName As Dictionary(Of String, Double)
    Private SalesPrdName As Dictionary(Of String, Double)
    

    然后,当您加载购买和销售时,您会改为执行以下操作:

    While dbread.Read
        If dbread.HasRows Then
            PurchasePrdName.Add(dbread("ProductName").ToString, dbread("SUM(Quantity)"))
        End If
    End While
    

    然后,当您进行销售时,您需要遍历您的产品字典以提取每个产品名称。您可以存储销售数量,但您也可以同时计算差异并存储。最好创建一个包含所有项目的类并将它们存储在一个字典中。

    在销售负载中,您将迭代您的字典

    For Each product In PurchasePrdName.Keys
        Dim qry As String = "SELECT SUM(Quantity) FROM salesitems WHERE ProductName='" & product & "' GROUP BY ProductId"
    
        dcommand.CommandText = qry
    
        Dim dbread As MySqlDataReader = dcommand.ExecuteReader
        DataGridView1.Rows.Clear()
        While dbread.Read
            If dbread.HasRows Then
                SalesPrdName.Add(product, PurchasePrdName(product) - Double.Parse(dbread("SUM(Quantity)")))
            End If
        End While
    
        dbread.Close()
    
    Next
    

    最后你也想在循环中添加行...

    For Each product In SalesPrdName.Keys
        DataGridView1.Rows.Add(product, SalesPrdName(product))
    Next
    

    您可能希望更改变量名称以反映它们的新含义等。如果您想存储销售数量,那么我建议使用一个字典,其中产品名称作为键,类作为值。该类将由产品名称、产品数量、销售数量以及两者之间的差异组成。

    【讨论】:

    • 能否详细说明。我想,我需要在最后一个代码中使用循环,即LoadData(),但我不知道怎么做。
    • 我在上面的答案中添加了更多细节。
    • Raj,如果该答案有帮助,请将其标记为正确。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    相关资源
    最近更新 更多