多级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编号。
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开始;每个孩子都可以有孩子。
发布于 2019-06-20 08:56:42
我编写了一个递归子例程来更新datatable,然后编写了另一个例程来更新数据库。
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 Subhttps://stackoverflow.com/questions/56674184
复制相似问题