数据集中的总和值通过将结果分组并将结果加载到试算表的标题行

时间:2016-10-16 19:12:23

标签: vb.net

我通过填写资产子帐户和银行余额以及库存值的值来创建数据集。从不同的表中收集了所有这些值。

现在问题我想要将具有相同父帐号的行中的每个值相加,并且想要在同一数据集表中作为父帐号的帐号中更新结果。

有不同类型的行。以下可能性可能在行中。 该行可以是父组帐户。每个组可以有不同的交易账户,也可以有子账户组账户,组账户没有交易。他们的价值只是他们子账户的总和。

表格如下。

AccountNo | AccountDepth| ParrentAccountNo|OpeningDebit|
1         |   0         |                 |            | <Main Header
11        |   1         |   1             |            |   <Header Child    
111       |   2         |   11            |10000       |     <Trx   
112       |   2         |   11            |            |   <Header Child
1121      |   3         |   112           | 5000       |     <Trx
1122      |   3         |   112           |15000       |     <Trx   
113       |   2         |   11            |            |   <Hedaer Child
1131      |   3         |   113           |            |   <Header Child
11311     |   4         |   1131          |20000       |      <Trx  
1132      |   3         |   113           |35000       |      <Trx  
12        |   1         |   1             |            |   <Header Child
121       |   2         |   12            |            |     <Header Child
1211      |   3         |   121           |10000       |      <Trx  

我想将每个事务帐户加到标题中,而不是将所有标题加到标题中,如果它们存在任何子项,那么它的子项总和也在标题中,然后所有标题都添加到其父项。 请记住,所有值都在DATA-SET Table

1 个答案:

答案 0 :(得分:0)

我从来没有回答过我的任何问题。我是怎么做到的。 如果有人也需要,请与我分享。

   Dim currentValue As Integer = 0, Depth As Integer = 0
        For c As Integer = 0 To ds.Tables(0).Rows.Count - 1
            currentValue = ds.Tables(0).Rows(c).Item("AccountDepth")
            If currentValue > Depth Then Depth = currentValue
        Next

        Dim depthchang As Integer = Depth

        For i = 0 To Depth
            Dim dt As DataTable = ds.Tables(0).Clone
            Dim rows() As DataRow = ds.Tables(0).Select("AccountDepth = " & depthchang & "")
            Dim row1 As DataRow
            For Each row1 In rows
                dt.ImportRow(row1)
            Next
            For j = 0 To ds.Tables(0).Rows.Count - 1
                For k = 0 To dt.Rows.Count - 1
                    If ds.Tables(0).Rows(j).Item("AccountNo") = dt.Rows(k).Item("ParentAccountNo") Then
                        ds.Tables(0).Rows(j).Item("OpeningDebit") = ds.Tables(0).Rows(j).Item("OpeningDebit") + dt.Rows(k).Item("OpeningDebit")
                        ds.Tables(0).Rows(j).Item("OpeningCredit") = ds.Tables(0).Rows(j).Item("OpeningCredit") + dt.Rows(k).Item("OpeningCredit")
                    End If
                Next
            Next
            dt.Clear()
            depthchang = depthchang - 1
        Next

这段代码给了我所需的输出。