Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MSProject.Task创建子任务_C#_Project_Task - Fatal编程技术网

C# MSProject.Task创建子任务

C# MSProject.Task创建子任务,c#,project,task,C#,Project,Task,我正在尝试创建一个动态MPP文件。 我遇到的问题是在其他任务(子任务)上创建任务 我正在尝试这段代码,在插入第一个任务后,所有其他主要任务都是这一任务的子任务,我想要的子任务以一种奇怪的方式出现 Task_0 Task_1 Task_2 Task_3 Task_4 SubTaskName_4 SubTaskName_3 SubT

我正在尝试创建一个动态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();
}
Microsoft.Office.Interop.MSProject.Task;
字符串t1,t2;
对于(int i=0;i<5;i++)
{
task=project.Tasks.Add(
“任务”+i.ToString(),i+1);
t1=“2012年12月5日”;
t2=“12/12/2012”;
/*TimeSpan=Convert.ToDateTime(t2)-Convert.ToDateTime(t1);
task.Duration=span.Hours*/
task.Start=t1;
task.Finish=t2;
task.ResourceNames=“某人”;
//task.OutlineLevel=1;
task.Text1=“task_TestTask”+i.ToString();
//我也试过这个
/*Microsoft.Office.Interop.MSProject.Task newTask=Task.OutlineChildren.Add(“otraSubTarea_u”+i.ToString(),Task.ID+1);
newTask.Start=“12/12/2012”;
newTask.Finish=“12/12/2012”;
newTask.OutlineIndent()*/
Microsoft.Office.Interop.MSProject.Task子任务=project.Tasks.Add(“子任务名称”+i.ToString(),任务ID+1);
子任务Start=“05/12/2012”;
子任务.Finish=“12/12/2012”;
子任务。OutlineIndent();
}

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

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

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

  • 您需要两个索引(或从第一个索引计算第二个索引)。一个索引跟踪任务及其命名以及附加的子任务。第二个索引需要跟踪实际任务的位置。例如,任务_1插入位置1,任务_2像数组一样插入位置3(任务索引基于1而不是基于0)
  • 一旦缩进一个任务,所有子任务也将继承缩进,因此对于每个新的“父”任务,您将需要“outdent”。您可以假设您将超越初始任务所期望的每个父任务
  • 以下代码适用于我:

    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;
    }
    
    您可以将这些索引组合在一起,只需将位置索引称为基于命名索引的计算(例如iTaskIndex=((iTaskNameIndex*2)-1)),但我认为使用两个单独的索引,问题和代码会更清楚

    Task_1
        SubTaskName_1
    Task_2
        SubTaskName_2
    Task_3
        SubTaskName_3
    Task_4
        SubTaskName_4
    Task_5
        SubTaskName_5