翻譯|使用教程|編輯:楊鵬連|2020-09-21 16:39:52.623|閱讀 329 次
概述:VARCHART XGantt是一個交互式甘特圖組件,可生成清晰,靈活的甘特圖。本文介紹了 XGantt .NET如何計算截止日期。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
甘特圖(Xgantt)從1998年的第一個商用版本開始就致力于計劃編制和項目管理方面控件的研究和開發(fā),經(jīng)過20多年的積累和沉淀,目前可為軟件開發(fā)商和最終用戶提供最頂級的計劃編制和項目管理的控件產(chǎn)品,幫助用戶快速的整合項目管理軟件所需的甘特圖,網(wǎng)絡圖,資源柱狀圖,日程日歷,資源調(diào)度等功能模塊,并提供全方位的支持和服務。
VARCHART XGantt是一款功能強大的甘特圖控件,其模塊化的設計讓您可以創(chuàng)建滿足需要的應用程序。XGantt可用于.NET,ActiveX和ASP.NET應用程序,可以快速、簡單地集成到您的應用程序中,幫助您識別性能瓶頸、避免延遲以及高效利用資源,使復雜數(shù)據(jù)變得更加容易理解。
與時間和資源相關的計劃數(shù)據(jù),例如工作,任務,訂單,活動和能力,最好在甘特圖中顯示。
在智能甘特圖中,計劃者可以隨時采取糾正措施。
加速您的開發(fā)并創(chuàng)建引人注目的、易于使用的可視化調(diào)度體驗。VARCHART XGantt在市場上已有近30年的歷史,它提供了最完善的C#Gantt圖表控件,可用于構建現(xiàn)代而又可靠的行業(yè)資源調(diào)度應用程序。
保存結束日期的表列仍然為空。一個活動的結束可以使用 VARCHART XGantt 中的日歷從字段開始和持續(xù)時間計算。
在默認日歷中,工作日(周一到周五)預定義為活動時間,而周末(周六和周日)定義為非活動時間。
您可以通過它們的灰色背景來識別圖表中的非活動時間。可以通過禁用節(jié)點屬性頁上的“節(jié)點使用日歷”選項來關閉日歷。
請注意使用日歷和不使用日歷時的計算差異:
如果日歷被激活,從周五開始并持續(xù)3天的活動將在周二結束。如果不使用日歷,活動將在周日結束。
可以使用對象VcCalendar的方法AddDuration(…)來計算結束日期。這需要每個活動的開始和持續(xù)時間。字段可以通過它們的索引訪問。在通過方法set_DataField(…)設置完結束日期之后,需要調(diào)用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();
由鼠標交互創(chuàng)建或修改的活動的開始和結束日期將自動放置在活動時間中。
相反,由API或通過編輯對話框設置的日期可以放在非工作時間。
計算生成的日期總是放在工作時間中。為了確保API設置的日期被放在工作時間中,開始日期需要從結束日期和活動持續(xù)時間開始計算。
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);為了保持數(shù)據(jù)的一致性,缺失或負的持續(xù)時間應被視為不適當,并被重置為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. 日期或持續(xù)時間被數(shù)據(jù)編輯對話框或就地編輯器修改后
3.活動值被API修改后
但是,經(jīng)過鼠標交互修改后,不需要啟動計算,因為在這種情況下,內(nèi)部計算將自動執(zhí)行。
通過VcGantt對象的屬性節(jié)點集合,可以建立一個包含所有節(jié)點的計算循環(huán)。它的代碼將被添加到事件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); }由用戶引起的數(shù)據(jù)改變可以通過事件VcNodeModified來檢測。添加的方法調(diào)用將計算結束日期。
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); }如果數(shù)據(jù)的值被API改變,則必須顯式調(diào)用方法SetNodeEndDate(…)。
APS幫助提升企業(yè)生產(chǎn)效率,真正實現(xiàn)生產(chǎn)計劃可視化呈現(xiàn)與控制,快速有效響應不同場景的生產(chǎn)計劃,提高準時交貨能力,提高產(chǎn)能和資源利用率
想要了解甘特圖或慧都APS系統(tǒng),請登錄慧都網(wǎng),解決您的問題!
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: