Предшественники диаграммы Ганта, использующие элемент управления JSGrid - PullRequest
0 голосов
/ 22 ноября 2011

Я пытаюсь создать генератор диаграмм Ганта, используя элемент управления точкой обмена:

<Sharepoint:JsGrid>

Я следовал этому руководству: Как: создать диаграмму Ганта с использованием элемента управления JS Grid

Я также связал свой Sharepoint TaskList в качестве источника данных.

Я разработал систему фильтров с использованием некоторого XML.

Но теперь я хочу управлять предшественниками и представлять зависимостипо стрелке.

Для управления ими я использовал последний параметр функции EnableGantt (ganttDependentsColumnName), которому просто нужно имя столбца, который содержит информацию о зависимостях.

Что я должен поставить в этой колонке?

Я пытался заполнить его идентификатором задачи - линией DataRow, содержащей предшественники, и я попытался поместить объект класса Dependency:

class Dependency : IJsonSerializable
{
    public object Key {get; set;} // RecordKey
    public LinkType{get; set;} //LinkType

    public string ToJson(Serializer s)
    {
        return JsonUtility.SerializeToJsonFromProperties(s,this);
    }
}

(Этот код взят из ответов в руководстве)

В ключе, что я должен поставить?Если кто-то сделал это или знает, как это сделать, это может быть приятно.

1 Ответ

1 голос
/ 17 июля 2012

Не уверен, если вы все еще сталкиваетесь с этой проблемой. Но это то, что мы сделали для столбца 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 типы ссылок соответствуют правильных строк и что ваши задачи перечислены правильно с правильными датами начала и датами завершения задачи и предшествующие ключи.

...