使用JSGrid控件的甘特图前身

本文关键字:JSGrid 控件 使用 | 更新日期: 2023-09-27 18:15:20

我正在尝试创建一个甘特图生成器,使用共享点控件:

<Sharepoint:JsGrid>

我遵循了这个教程:如何:使用JS网格控件创建甘特图

我还链接了我的Sharepoint任务列表作为数据源。

我使用一些XML开发了一个过滤器系统。

但是我现在想要管理前任并用箭头表示依赖关系。

为了管理它们,我使用了EnableGantt函数(ganttDependentsColumnName)的最后一个参数,它只需要包含依赖信息的列的名称。

我要在这一列里写些什么?

我尝试的是用任务的ID填充它,包含前辈的DataRow的车道,我尝试放置类依赖的对象:

class Dependency : IJsonSerializable
{
    public object Key {get; set;} // RecordKey
    public LinkType{get; set;} //LinkType
    public string ToJson(Serializer s)
    {
        return JsonUtility.SerializeToJsonFromProperties(s,this);
    }
}

(此代码来自教程中的答案)

在键中,我必须放什么?如果有人做过或者知道怎么做,那就太好了。

使用JSGrid控件的甘特图前身

不确定您是否仍然面临这个问题。但这是我们对Predecessors列所做的这是我所理解的:

1]将Dependency类更改一点以添加如下所示的构造函数(否则会出错)。

2]然后,你基本上需要传递一个Dependency数组到Predecessors列,这意味着JSGrid控件需要知道依赖的起点/行和终点/行(因此需要一个数组)。JSON序列化已经被处理好了,因为继承和ToJson方法,所以不用担心。

代码:

1]依赖类:

public class Dependency : IJsonSerializable
{
    public object Key { get; set; } // recordKey
    public LinkType Type { get; set; } // SP.JsGrid.LinkType
    public Dependency() {
        Key = DBNull.Value;
        Type = LinkType.FinishStart;
    }
    public string ToJson(Serializer s)
    {
        return JsonUtility.SerializeToJsonFromProperties(s, this);
    }
}

2]如果不是针对SharePoint任务列表(其中数据是DataTable的对象)添加列:

data.Columns.Add(new DataColumn("Predecessors",typeof(Dependency[])));

3]设置右对象数组为Predecessors列:

    if (<<A predecessor exists>>){
    Dependency[] dep = new Dependency[2];
    dep[0] = new Dependency();
    try{
        /*
        // Unique Identifier for your row based on what you are 
        // passing to the GridSerializer while initializing it 
        // (as a third parameter which is called keyColumnName)
        // In my case I had to get it by doing some coding as  
        // shown. The first object in the array represents the 
        // previous row and so the unique identifier should  
        // point to the previous row
        */
        dep[0].Key = (
                data.Select(
                    "ID=" + 
                    data.Rows[s]["PredecessorsID"].ToString()
                    )
                    [0]["Key"]
                );
    }catch (Exception ex){ 
        dep[0].Key = DBNull.Value; 
    }
    dep[0].Type = LinkType.FinishStart;
    /*
    // Unique Identifier for your row based on what you are 
    // passing to the GridSerializer while initializing it 
    // (as a third parameter which is called keyColumnName)
    // In my case I had to get it by doing some coding as  
    // shown. The second object in the array represents the 
    // current row and so the unique identifier should  
    // point to the current row
    */
    dep[1] = new Dependency();
    try{ 
        dep[1].Key = data.Rows[s]["Key"]; 
    }catch (Exception ex){ 
        dep[0].Key = DBNull.Value; 
    }
    dep[1].Type = LinkType.StartFinish;
    data.Rows[s]["Predecessors"] = dep;
}

最后,在调用EnableGantt()函数时传递Predecessors列:

gds.EnableGantt(
    Convert.ToDateTime(
        dr["start Date"]
    ), 
    Convert.ToDateTime(
        dr["Due Date"]
    ), 
    GanttUtilities.GetStyleInfo(), 
    "Predecessors"
    );

确保您的StartFinishFinishStart链接类型匹配正确的行,并且您的任务正确列出了正确的任务开始日期和任务结束日期以及前任键。