翻譯|行業(yè)資訊|編輯:黃竹雯|2018-12-26 17:02:58.000|閱讀 418 次
概述:文章主要介紹關(guān)于VARCHART XGantt .NET的最佳實(shí)踐之通過表交互式完成交換任務(wù)
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
VARCHART XGantt是一款功能強(qiáng)大的甘特圖控件,其模塊化的設(shè)計(jì)讓您可以創(chuàng)建滿足需要的應(yīng)用程序。XGantt可用于.NET,ActiveX和ASP.NET應(yīng)用程序,可以快速、簡單地集成到您的應(yīng)用程序中,幫助您識(shí)別性能瓶頸、避免延遲以及高效利用資源,使復(fù)雜數(shù)據(jù)變得更加容易理解。
本文主要通過利用VARCHART XGantt來處理文章提及的可能發(fā)生的情況,向大家展示VARCHART XGantt.NET的最佳實(shí)踐,即通過表交互式交換任務(wù)。
客戶已經(jīng)開發(fā)出一個(gè)圖形規(guī)劃板,用于使用VARCHART XGantt管理他的機(jī)器。任務(wù)在機(jī)器上按順序運(yùn)行,沒有緩沖時(shí)間。在計(jì)劃表的表格區(qū)域中,任務(wù)按開始日期排序,相應(yīng)地按順序列出。這在甘特區(qū)顯示為“下降樓梯”。
客戶希望能夠僅在表區(qū)域中通過拖放更改機(jī)器內(nèi)的任務(wù)順序。從技術(shù)上講,這個(gè)問題必須通過制作一個(gè)已經(jīng)在表格中移動(dòng)的任務(wù)來實(shí)現(xiàn)。需要相應(yīng)地改變?nèi)蝿?wù)的進(jìn)程順序,如下所示:
移動(dòng)前
移動(dòng)后
在VARCHART XGantt中以交互方式移動(dòng)節(jié)點(diǎn)會(huì)觸發(fā)事件VcNodeModifying和VcNodeModifiedEx。
VcNodemodifying首先檢查任務(wù)是否已被移動(dòng)到另一個(gè)組,因?yàn)楦鶕?jù)規(guī)范這是違規(guī)的。需要檢查在移動(dòng)任務(wù)之后其機(jī)器數(shù)據(jù)字段的內(nèi)容是否已經(jīng)改變。如果內(nèi)容已更改,則ReturnStatus將設(shè)置為vcRetStatFalse,從而撤消移動(dòng)。在這種情況下,事件VcNodeModifiedEx將不會(huì)出現(xiàn)。
private void vcGantt1_VcNodeModifying(object sender, VcNodeModifyingEventArgs e) { //Make sure that a task cannot be moved to another machine string oldGroupName = e.OldNode.get_DataField(eMainData.Machine).ToString(); string newGroupName = e.Node.get_DataField(eMainData.Machine).ToString(); e.ReturnStatus = oldGroupName == newGroupName ? VcReturnStatus.vcRetStatDefault : VcReturnStatus.vcRetStatFalse; }
如果允許移動(dòng),則必須重新安排任務(wù),通過在VcNodeModifiedEx事件中完成的。然后再次運(yùn)行該組的所有任務(wù),并重新計(jì)算其開始和結(jié)束日期。從最早的開始日期開始,考慮相應(yīng)的機(jī)器日歷。在VcNodeCollection nodesInGroup中,節(jié)點(diǎn)按表中顯示的順序列出。
private void vcGantt1_VcNodeModifiedEx(object sender, VcNodeModifiedExEventArgs e) { DateTime minStartDate = DateTime.MaxValue; DateTime startDate; DateTime endDate; VcCalendar cal = vcGantt1.CalendarCollection.CalendarByName(e.Node.get_DataField(eMainData.Machine).ToString()); VcNodeCollection nodesInGroup = e.Node.SuperGroup.NodeCollection; //Mark the moved node as "moved" e.Node.set_DataField(eMainData._Moved, "1"); e.Node.Update(); //Search for the earliest start date of the nodes in the group foreach (VcNode node in nodesInGroup) { startDate = Convert.ToDateTime(node.get_DataField(eMainData.Start)); minStartDate = (startDate < minStartDate ? startDate : minStartDate); } startDate = minStartDate; //Reposition the tasks on the machine so that they follow each other //without gaps or overlaps. vcGantt1.SuspendUpdate(true); foreach (VcNode node in nodesInGroup) { endDate = cal.AddDuration(startDate, Convert.ToInt32(node.get_DataField(eMainData.Duration))); node.set_DataField(eMainData.Start, startDate); node.set_DataField(eMainData.End, endDate); node.Update(); startDate = (cal.IsWorktime(endDate) ? endDate : cal.GetStartOfNextWorktime(endDate)); } vcGantt1.SuspendUpdate(false); }
重新計(jì)算日期后,任務(wù)將再次顯示為降序樓梯:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn