甘特图从1998年的第一个商用版本开始就致力于计划编制和项目管理方面控件的研究和开发,经过20多年的积累和沉淀,目前可为软件开发商和最终用户提供最顶级的计划编制和项目管理的控件产品,帮助用户快速的整合项目管理软件所需的甘特图,网络图,资源柱状图,日程日历,资源调度等功能模块,并提供全方位的支持和服务。

VARCHART XGantt是一款功能强大的甘特图控件,其模块化的设计让您可以创建满足需要的应用程序。XGantt可用于.NET,ActiveX和ASP.NET应用程序,可以快速、简单地集成到您的应用程序中,帮助您识别性能瓶颈、避免延迟以及高效利用资源,使复杂数据变得更加容易理解。

与时间和资源相关的计划数据,例如工作,任务,订单,活动和能力,最好在甘特图中显示。

在智能甘特图中,计划者可以随时采取纠正措施。

加速您的开发并创建引人注目的、易于使用的可视化调度体验。VARCHART XGantt在市场上已有近30年的历史,它提供了最完善的C#Gantt图表控件,可用于构建现代而又可靠的行业资源调度应用程序。

保存结束日期的表列仍然为空。一个活动的结束可以使用 VARCHART XGantt 中的日历从字段开始和持续时间计算。

在默认日历中,工作日(周一到周五)预定义为活动时间,而周末(周六和周日)定义为非活动时间。

您可以通过它们的灰色背景来识别图表中的非活动时间。可以通过禁用节点属性页上的“节点使用日历”选项来关闭日历。

请注意使用日历和不使用日历时的计算差异:

如果日历被激活,从周五开始并持续3天的活动将在周二结束。如果不使用日历,活动将在周日结束。

可以使用对象VcCalendar的方法AddDuration(…)来计算结束日期。这需要每个活动的开始和持续时间。字段可以通过它们的索引访问。在通过方法set_DataField(…)设置完结束日期之后,需要调用VcNode的方法Update()来显示修改。

Example Code VB.NET

Dim tmpCal As VcCalendar
Dim tmpDate As Date
Set tmpCal = VcGantt1.CalendarCollection.Active
tmpDate = tmpCalendar.AddDuration(node.DataField(2), node.DataField(4))
node.DataField(3) = tmpDate
node.Update()

Example Code C#

VcCalendar tmpCal = vcGantt1.CalendarCollection.Active;
DateTime tmpDate = tmpCal.AddDuration((DateTime)node.get_DataField(2),
 Convert.ToInt32(node.get_DataField(4)));
node.set_DataField(3, tmpDate);
node.Update();

由鼠标交互创建或修改的活动的开始和结束日期将自动放置在活动时间中。

相反,由API或通过编辑对话框设置的日期可以放在非工作时间。

计算生成的日期总是放在工作时间中。为了确保API设置的日期被放在工作时间中,开始日期需要从结束日期和活动持续时间开始计算。

Example Code VB.NET

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

Example Code C#

tmpDate = tmpCal.AddDuration((DateTime)node.get_DataField(3),(-1) *
Convert.ToInt32(node.get_DataField(4)));
node.set_DataField(2, tmpDate);

为了保持数据的一致性,缺失或负的持续时间应被视为不适当,并被重置为0。如果缺少开始日期,则无法计算结束日期。该代码被恢复在一个单独的方法中,名为SetNodeEndDate(...)。

Example Code VB.NET

Private Sub SetNodeEndDate(ByVal node As VcNode)
 'Avoid empty duration 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 tmpCal = VcGantt1.CalendarCollection.Active Dim tmpDate As DateTime 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.Update() End If End Sub

Example Code C#

private void SetNodeEndDate(VcNode node)
 {
 // Avoid empty duration or negative duration
 if ((string) node.get_DataField(4) == "" ||
 Convert.ToInt32(node.get_DataField(4)) < 0) node.set_DataField(4,"0"); // Start Date empty then end date should also be empty if (node.get_DataField(2).ToString() == "31.12.1899 00:00:00") node.set_DataField(3,""); else { // Precondition in property page nodes // "Assign calendar to nodes" must be true VcCalendar tmpCal = vcGantt1.CalendarCollection.Active; DateTime tmpDate = tmpCal.AddDuration( (DateTime)node.get_DataField(2), Convert.ToInt32(node.get_DataField(4))); node.set_DataField(3, tmpDate); // start date only in active times tmpDate = tmpCal.AddDuration((DateTime)node.get_DataField(3), (-1) * Convert.ToInt32(node.get_DataField(4))); node.set_DataField(2, tmpDate); node.Update(); } }

需要计算日期:

1. 活动加载后
2. 日期或持续时间被数据编辑对话框或就地编辑器修改后
3.活动值被API修改后

但是,经过鼠标交互修改后,不需要启动计算,因为在这种情况下,内部计算将自动执行。
通过VcGantt对象的属性节点集合,可以建立一个包含所有节点的计算循环。它的代码将被添加到事件Form1_Load(…)的末尾。

Example Code VB.NET

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

Example Code C#

// Calculate end date for all nodes
foreach (VcNode node in vcGantt1.NodeCollection)
{
SetNodeEndDate(node);
}

由用户引起的数据改变可以通过事件VcNodeModified来检测。添加的方法调用将计算结束日期。

Example Code VB.NET

Private Sub VcGantt1_VcNodeModified(ByVal sender As Object, ByVal e As
NETRONIC.XGantt.VcNodeModifiedEventArgs) Handles VcGantt1.VcNodeModified
SetNodeEndDate(e.Node)
End Sub

Example Code C#

private void vcGantt1_VcNodeModified(object sender,
NETRONIC.XGantt.VcNodeModifiedEventArgs e)
{
SetNodeEndDate(e.Node);
}

如果数据的值被API改变,则必须显式调用方法SetNodeEndDate(…)。

————————————————

APS帮助提升企业生产效率,真正实现生产计划可视化呈现与控制,快速有效响应不同场景的生产计划,提高准时交货能力,提高产能和资源利用率
想要了解甘特图或慧都APS系统,请登录慧都网咨询在线客服,解决您的问题!
本文章转载自【慧都科技】evget欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,尊重他人劳动成果

VARCHART XGantt如何计算截止日期的更多相关文章

  1. 交互式甘特图组件VARCHART XGantt 如何在活动中标注非工作间隔

    甘特图从1998年的第一个商用版本开始就致力于计划编制和项目管理方面控件的研究和开发,经过20多年的积累和沉淀,目前可为软件开发商和最终用户提供最顶级的计划编制和项目管理的控件产品,帮助用户快速的整合 ...

  2. Odoo9是如何计算预定交付日期的

    计算预定日期目的是按计划交付.接收等.根据不同公司习惯,Odoo会通过调度器自动生成预定日期,Odoo调度器计算每一行的每件事情,无论是生产订单.交货单.销售订单等,依据Odoo中配置的不同交付时间( ...

  3. background-position 50% 50%是如何计算的

    background-position:value1 value2 value1和value2的值可以值绝对值也可以是百分数,大部分值都很好理解,但是50% 50%这两个值是如何计算的呢? 图片水平和 ...

  4. 阻抗计算(用SI9000如何计算微带线)

    用SI9000如何计算微带线                一.几个概念: 阻抗的定义:在某一频率下,电子器件传输信号线中,相对某一参考层,其高频信号或电磁波在传播过程中所受的阻力称之为特性阻抗,它是 ...

  5. 如何计算一个字符串表示的计算式的值?——C_递归算法实现

    在<C程序设计伴侣>的8.7.3 向main()函数传递数据这一小节中,我们介绍了如何通过main()函数的参数,向程序传递两个数据并计算其和值的简单加法计算器add.exe.这个程序,好 ...

  6. 如何计算IP地址及CIDR(收藏)

    如何计算IP地址及CIDR 一. IP地址概念 IP地址是一个32位的二进制数,它由网络ID和主机ID两部份组成,用来在网络中唯一的标识的一台计算机.网络ID用来标识计算机所处的网段:主 机ID用来标 ...

  7. 如何计算IP地址及CIDR,子网掩码计算

    如何计算IP地址及CIDR 一. IP地址概念 IP地址是一个32位的二进制数,它由网络ID和主机ID两部份组成,用来在网络中唯一的标识的一台计算机.网络ID用来标识计算机所处的网段:主 机ID用来标 ...

  8. PPI是什么?如何计算?

    PPI,英文全称:pixels per inch,即像素每英寸,也叫像素密度,它是描述在水平的和垂直的方向上,每英寸距离的图像包含的像素(pixel)数目.因此PPI数值越高,即代表显示屏能够以越高的 ...

  9. PM2.5空气质量指数(AQI)是如何计算的

    AQI如何计算     具体要计算PM2.5空气质量指数(AQI),SENBE申贝技术人员向您介绍如何计算的公式.     比如当实测浓度小于等于0.035时,根据实测浓度×50/0.035计算.例如 ...

随机推荐

  1. 关于对MyBatis.net框架的学习笔记( MyBatis.net是一款灵活性极大,sql由开发者自行在xml中编写, 轻量的ORM映射框架). 同时避免了sql硬编码到代码中不易维护的问题...

    对于为什么要用ORM,为什么又要选择MyBatis.net,这个问题希望读者自行查找资料.这里直接贴出相关的调试笔记. 步骤1)下载与引用. http://code.google.com/p/myba ...

  2. Laravel Facade原理及使用

    Laravel Facade原理及使用 laravel过于庞大,加之笔者水平有限,所以后面的源码解读会按模块功能介绍,希望能帮大家稍微捋顺下思路,即使能够帮助大家回顾几个函数也好.如发现错误,还望指正 ...

  3. composer源码简单分析(一)

    composer分析(一) 本文内容 基于PSR-4规范的自动加载 请结合文档和下面的代码注释 spl_autoload_register php闭包Closure简单用法(大体使用情景: 生成回调提 ...

  4. android开发之集成zxing,二维码,以及扫描二维码的功能实现。带源代码下载

    package cc.jiusansec.www; import com.google.zxing.WriterException; import com.zxing.activity.Capture ...

  5. mysql 8.0.11安装教程

    安装环境:win7 1. 下载安装包 下载地址:https://dev.mysql.com/downloads/file/?id=476233 2. 解压zip包 3. 初始化my.ini 创建my. ...

  6. 使用Unity的50个建议

    关于这些建议 这些建议并不适用于所有的项目 这些建议是基于我与3-20人的小团队项目经验总结出来的 结构.可重复使用性.明晰度都是有价的——团队规模和项目规模决定了是否值得付这个价. 一些建议也许公然 ...

  7. 10.redis cluster介绍与gossip协议

    一.redis cluster 介绍 自动将数据进行分片,每个 master 上放一部分数据 提供内置的高可用支持,部分 master 不可用时,还是可以继续工作的 redis cluster架构下的 ...

  8. JS实现斐波那契数列的五种方式

    下面是五种实现斐波那契数列的方法 循环   function fibonacci(n){ var res1 = 1; var res2 = 1; var sum = res2; for(var i = ...

  9. 微信小程序(1)

    微信小程序 什么是微信小程序? 微信小程序优点 跨平台 打开速度比h5快 不用下载 开发目录结构介绍 1. 小程序Pages目录说明 2. 工具文件夹 3. 全局文件 用法1 全局APP.json文件 ...

  10. 用于测试SqlAnalyzer1.00的十七个测试用例

    SqlAnalyzer功能:解析SQL语句,具体到字段,表和条件,并将其整理后输出格式化文本. 1. 原文=select a from b 整理后文本= select a from b 2. 原文=s ...