首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对数据表中的工作明细结构(WBS)重新编号

对数据表中的工作明细结构(WBS)重新编号
EN

Stack Overflow用户
提问于 2019-06-20 02:55:33
回答 1查看 62关注 0票数 0

多级WBS用户可以删除一些不适用于其项目的任务。目标是对整个WBS重新编号,这样就不会跳过任何编号。例如: 1.1.1,1.1.2,1.1.4 -数字1.1.3被删除。每个WBS元素可能具有也可能没有需要重新编号的子元素。我有一个数据表中的数据,字段: WBS_ID,WBSNo,ParentID,ParentNo,SortKey(原始的WBS编号)和备注。WBS_ID是UID,ParentID是父WBS元素的WBS_ID。WBS的第一个元素在ParentID字段中具有空值。

我似乎无法掌握如何进行迭代函数调用来创建WBS编号。

代码语言:javascript
复制
Dim dTb As New DataTable
    Using Conn
        Conn.Open()
        Using dad As New SqlClient.SqlDataAdapter(vSqlStr, Conn)
            dad.SelectCommand.Parameters.Add("@ProjectID", SqlDbType.Int)
            dad.SelectCommand.Parameters.Add("@Revision", SqlDbType.Int)
            dad.SelectCommand.Parameters("@ProjectID").Value = vProjectID
            dad.SelectCommand.Parameters("@Revision").Value = vRevision
            dad.Fill(dTb) 'Now we have a table with all the elements .
        End Using
        Conn.Close()
    End Using
    'Now work with the datatable
    'WBS_ID, WBSNo, WBSLevel, ParentID, ParentNo, SortKey, Notes
    dTb.DefaultView.Sort = "SortKey ASC"
    dTb = dTb.DefaultView.ToTable
    Dim vRowCount As Int16
    vRowCount = dTb.Rows.Count
    Dim vCurRow As Int16 = 0
    For x = 0 To vRowCount - 1
        If Not IsDBNull(dTb.Rows(x)("ParentID")) Then

        Else
            dTb.Rows(x)("WBSNo") = "1"
        End If
        dTb.Rows(x)("Notes") = dTb.Rows(x)("Notes") & vbCrLf & "<<< Old WBS No. = " & dTb.Rows(x)("SortKey")
    Next

对WBS重新编号,从"1“开始,元素的每个子元素都将用父编号加上句点(.)进行编号。然后按顺序从1开始;每个孩子都可以有孩子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-20 08:56:42

我编写了一个递归子例程来更新datatable,然后编写了另一个例程来更新数据库。

代码语言:javascript
复制
Sub RenumberChildren(vParentID As Int16, vParentWBSNo As String)
    Dim ChildCount As Int16 = 0
    For x = 0 To dTb.Rows.Count - 1

        If Not IsDBNull(dTb.Rows(x)("ParentID")) Then
            If dTb.Rows(x)("ParentID") = vParentID Then
                ChildCount += 1
                dTb.Rows(x)("WBSNo") = vParentWBSNo & "." & ChildCount
                RenumberChildren(dTb.Rows(x)("WBS_ID"), dTb.Rows(x)("WBSNo"))
            End If
        End If
    Next


End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56674184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档