Не уверен, если вы все еще сталкиваетесь с этой проблемой. Но это то, что мы сделали для столбца 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;
}
Наконец, пропустите столбец Predecessors
при вызове функции EnableGantt()
:
gds.EnableGantt(
Convert.ToDateTime(
dr["start Date"]
),
Convert.ToDateTime(
dr["Due Date"]
),
GanttUtilities.GetStyleInfo(),
"Predecessors"
);
Убедитесь, что ваши StartFinish и FinishStart типы ссылок соответствуют правильных строк и что ваши задачи перечислены правильно с правильными датами начала и датами завершения задачи и предшествующие ключи.