Интерактивная диаграмма Ганта VARCHART XGantt: как рассчитать конечную дату (ActiveX издание)

VARCHART XGantt представляет собой интерактивный контроль диаграммы Ганта, и его модульная конструкция позволяет создавать приложения, которые отвечают вашим и вашим клиентам потребностям. Это может быть быстро и легко интегрировано в приложение, помогая выявлять узкие места в производительность, избежать задержек и эффективное использование ресурсов, что делает его более легким для понимания сложных данных.

В этой статье объясняется, как VARCHART XGantt основного времени вычислений деятельности концевого, и заинтересованные друзья могут смотреть на свои руки о ~

Таблица Конечная дата столбец остается пустым. Помощь , которая может быть включена в календаре VARCHART XGantt, от « начала » и « время в случае расчета» поля.

В календаре по умолчанию, рабочий день (с понедельника по пятницу) определяется как время активности, и в выходные дни (суббота и воскресенье) определяется как неактивное время.

На рисунке вы можете определить время неактивности на сером фоне. Под « узлами » , чтобы отключить «страницы свойств календаря , назначенный узел » , чтобы отключить календарь.

Пожалуйста, обратите внимание, что различия в расчете ли календарь:

Мероприятия начинаются с пятницы и длиться в течение трех дней, если календарь активирован, событие закончится во вторник. Нет календарь, событие не завершится в воскресенье.

Дата окончания через объект AddDuration VcCalendar из (...) метод расчета. Таким образом, начало и продолжительность каждого вида деятельности. Они могут быть получены из соответствующих полей данных по индексу. По DataField (...) затем установить дату окончания, вы должны вызвать UpdateNode VcNode путь , так что вы можете увидеть изменения в данных.

Пример кода

Тусклое tmpCal В VcCalendar 
Тусклое tmpDate как дата 
Set tmpCal = VcGantt1.CalendarCollection.Active 
tmpDate = tmpCal.AddDuration (node.DataField (2), node.DataField (4)) 
node.DataField (3) = tmpDate 
node.UpdateNode

Создание или изменение деятельности дата начала и конца автоматически помещается в активное время пути взаимодействия мыши.

QQ скриншот 20190827144111.png

В отличие от этого, API или диалоговые редактирования и даты могут быть помещены в нерабочее время.

QQ скриншот 20190827144136.png

Вычислив результирующую дату всегда находится в рабочее время. Для того, чтобы гарантировать, что даты, установленные в рабочее время API, рассчитываемые от требуемой даты и конечной даты начала продолжительности деятельности.

Пример кода

tmpDate = tmpCal.AddDuration (node.DataField (3) _ 
 (-1) * node.DataField (4)) 
node.DataField (2) = tmpDate

Для того , чтобы поддерживать согласованность данных, потеря или отрицательную длительность считаются неверными, и сбрасывается до 0. Если не указана дата начала, дата окончания не может быть вычислена. Обобщенная требуемый код с именем SetNodeEndDate (...) отдельные методы.

Пример кода

Private Sub SetNodeEndDate(ByVal node As VcNode)
 'Avoid empty or negative duration
 If node.DataField(4) = "" Or node.DataField(4) < 0 Then
 node.DataField(4) = "0"
 End If
 'Start date empty then end date should also be empty
 If node.DataField(2) = "31.12.1899 00:00:00" Then
 node.DataField(3) = ""
 Else
 'Precondition is property page nodes
 '"Assign calendar to nodes" must be true
 Dim tmpCal As VcCalendar
 Dim tmpDate As Date
 Set tmpCal = VcGantt1.CalendarCollection.Active
 tmpDate = tmpCal.AddDuration(node.DataField(2), _
 node.DataField(4))
 node.DataField(3) = tmpDate
 'Start date only in active times
 tmpDate = tmpCal.AddDuration(node.DataField(3), _
 (-1) * node.DataField(4))
 node.DataField(2) = tmpDate
 node.UpdateNode
 End If
End Sub

需要计算日期:

1、活动结束后

2、通过数据编辑对话框或就地编辑器修改日期或持续时间之后

3.、API修改活动值后

然而,在通过鼠标交互进行修改之后,不必启动计算,因为这将自动执行内部计算。

可以通过VcGantt对象的属性NodeCollection来设置包括所有节点的计算循环。它的代码将被添加到事件Form1_Load(...)的末尾。

示例代码

'Calculate end date for all nodes
Dim node As VcNode
For Each node In VcGantt1.NodeCollection
 SetNodeEndDate node
Next

可以通过事件OnNodeModifyComplete捕获用户引起的数据更改。方法调用执行结束日期的计算。

示例代码

Private Sub VcGantt1_OnNodeModifyComplete _ 
 (ByVal узел Как VcGanttLib.VcNode, _ 
 ByVal isLastNodeInSeries As Boolean) 
 узел SetNodeEndDate 
End Sub

Если данные были изменены через API, вы должны вызвать SetNodeEndDate (...) .


рекомендация

отblog.51cto.com/14467432/2433142