MS Project.Task创建子任务

时间:2012-09-26 15:20:49

标签: c# project task

我正在尝试创建动态MPP文件。 我遇到的问题是在其他任务(子任务)上创建任务

我正在尝试使用这段代码,在我插入第一个任务之后,所有其他主要任务都是这一个的子项,我想要的子任务以奇怪的方式出现。

    Task_0
       Task_1
          Task_2
            Task_3
               Task_4
               SubTaskName_4
            SubTaskName_3
          SubTaskName_2
        SubTaskName_1
     SubTaskName_0

我想要这样

  task 1
   subtask 1

  task 2
    subtask 2

我的代码如下

Microsoft.Office.Interop.MSProject.Task task;

string t1, t2;

for (int i = 0; i < 5; i++)
{
    task = project.Tasks.Add(

    "Task_" + i.ToString(), i + 1);
    t1 = "05/12/2012";
    t2 = "12/12/2012";

    /*TimeSpan span = Convert.ToDateTime(t2) - Convert.ToDateTime(t1);
    task.Duration = span.Hours;*/
    task.Start = t1;
    task.Finish = t2;
    task.ResourceNames = "Someone";

    //task.OutlineLevel = 1;

    task.Text1 = "Task_TestTask" + i.ToString();

     //also tried with this one
    /*Microsoft.Office.Interop.MSProject.Task newTask = task.OutlineChildren.Add("otraSubTarea_" + i.ToString(), task.ID + 1);
    newTask.Start = "12/12/2012";
    newTask.Finish = "12/12/2012";
    newTask.OutlineIndent();*/

    Microsoft.Office.Interop.MSProject.Task subTask = project.Tasks.Add("SubTaskName_" + i.ToString(), task.ID+1);
    subTask.Start = "05/12/2012";
    subTask.Finish = "12/12/2012";
    subTask.OutlineIndent();
}

我找不到太多关于此的信息。

1 个答案:

答案 0 :(得分:2)

不确定你是否已经解决了这个问题,但是你的帖子帮我解决了一个缩进问题,所以这里有一个答案,希望也可以解决你的问题。

我认为上面有两个问题可以解决

  1. 您需要两个索引(或从第一个索引计算第二个索引)。一个索引会跟踪您的任务及其命名以及附加的子任务。第二个索引需要跟踪实际任务的位置。例如。 Task_1插入位置1,Task_2插入位置3,就像一个数组(任务索引是从1开始而不是从0开始)
  2. 缩进任务后,所有子任务也将继承缩进,因此对于每个新的“父”任务,您需要“突出”。您可以假设您将完成初始任务所期望的每个父任务
  3. 以下代码适用于我:

    int iTaskIndex = 1;
    for (int iTaskNameIndex = 1; iTaskNameIndex <= 5; iTaskNameIndex++)
    {
        Task task = project.Tasks.Add("Task_" + iTaskNameIndex.ToString(), iTaskIndex);
        if (iTaskIndex > 1)
            task.OutlineOutdent();
        Task subTask = project.Tasks.Add("SubTaskName_" + iTaskNameIndex.ToString(), iTaskIndex + 1);
        subTask.OutlineIndent();
        iTaskIndex += 2;
    }
    

    插入新的父子任务对后,您需要

    1. 将任务命名索引增加1
    2. 将任务位置索引增加2
    3. 在添加新的父任务之前(或之后)重置缩进
    4. 这给了我:

      Task_1
          SubTaskName_1
      Task_2
          SubTaskName_2
      Task_3
          SubTaskName_3
      Task_4
          SubTaskName_4
      Task_5
          SubTaskName_5
      

      您可以将这些索引组合在一起,只需将位置索引作为基于命名索引的计算(例如iTaskIndex =((iTaskNameIndex * 2)-1)),但我认为问题和代码会更清晰两个单独的indeces