翻譯|使用教程|編輯:楊鵬連|2020-07-31 11:36:20.153|閱讀 418 次
概述:本文希望幫助您輕松使用我們的甘特圖控件VARCHART XGantt如何數據加載,從而使您熟悉XGantt的基礎知識,這對于將交互式甘特圖集成到您自己的調度應用程序中至關重要。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
甘特圖(Xgantt)從1998年的第一個商用版本開始就致力于計劃編制和項目管理方面控件的研究和開發,經過20多年的積累和沉淀,目前可為軟件開發商和最終用戶提供最頂級的計劃編制和項目管理的控件產品,幫助用戶快速的整合項目管理軟件所需的甘特圖,網絡圖,資源柱狀圖,日程日歷,資源調度等功能模塊,并提供全方位的支持和服務。
VARCHART XGantt是一款功能強大的甘特圖控件,其模塊化的設計讓您可以創建滿足需要的應用程序。XGantt可用于.NET,ActiveX和ASP.NET應用程序,可以快速、簡單地集成到您的應用程序中,幫助您識別性能瓶頸、避免延遲以及高效利用資源,使復雜數據變得更加容易理解。
示例:教程項目1
作為代碼示例的開發環境,我們向上使用Visual Studio .NET 2010。我們的第一個樣本將顯示以下結果:
我們的示例集合包括示例教程項目1,該示例項目演示了VARCHART XGantt的內置交互,并讓您輕松理解我們博客系列中描述的步驟。
現在,我們出發!
將甘特圖控件放置在窗體上
對Visual Studio 2010用戶的提醒: 正如我們在入門博客#1中已經提到的那樣,在將甘特圖控件拖到窗體之前, 請記住在應用程序中將目標框架從 .NET Framework Client Profile 更改為 .NET Framework 4 。 設置 (C#)或 高級編譯器設置 (VB),因為前者缺少System.Design.dll,這是設計時屬性頁所必需的。如果您不更改框架,則在嘗試將控件拖到窗體上時會彈出錯誤消息。
要將VARCHART XGantt控件放置在表單上,請xgantt_icon_toolbox 在工具箱中選擇其圖標,并在表單中您希望其出現的位置繪制一個框架。
如果希望在運行時將VARCHART Windows Forms控件的底部和右側調整為窗口的完整大小,請使用控件的anchor或dock屬性。
提示:
使用數據類型和“枚舉”元素時,程序開頭的“名稱空間”指令將為您節省詳細的參考指示。
VB: Imports NETRONIC.XGantt
C#: using NETRONIC.XGantt;
VcNodeCollection而不是NETRONIC.XGantt.VcNodeCollection。
提供數據
為了顯示活動和鏈接,VARCHART XGantt需要提供數據。默認情況下,兩個表用于必要的通信:
Maindata數據表的字段:
所需的其他字段需要手動定義。您可以在設計時通過對話框“ 管理數據表”(下部)來執行此操作,或者在運行時通過對象VcDataTableFieldCollection的Add(...)方法來執行此操作。
如果需要的表多于默認定義的表,則可以在屬性頁常規上單擊啟用的擴展數據表后,在“ 管理數據表 ”對話框的上部創建它們。
為了使活動和鏈接在我們的入門示例中可見,您需要首先在數據表中輸入一些記錄。
這可以通過使用該方法來進行添加(...)對象類型的VcDataRecordCollection。該方法EndLoading完成對對應的圖表上構成的數據輸入。為此,請在表單的Load事件中輸入以下代碼行。
示例代碼C#
vcGantt1.ExtendedDataTablesEnabled = true; VcDataTable dataTable = vcGantt1.DataTableCollection.DataTableByName("Maindata"); VcDataRecordCollection dataRecCltn = dataTable.DataRecordCollection; dataRecCltn.Add(“ 1;節點1; 04.05.2015 ;; 5 ;;組1;組A;”); dataRecCltn.Add(“ 2; Node 2; 11.05.2015 ;; 5 ;; Group 1; Group A;”); dataRecCltn.Add(“ 3;節點3; 18.05.2015 ;; 5 ;;組1;組B;”); dataTable = vcGantt1.DataTableCollection.DataTableByName(“ Relations”); dataRecCltn = dataTable.DataRecordCollection; dataRecCltn.Add("1;1;2"); dataRecCltn.Add("2;2;3"); vcGantt1.EndLoading();記錄中的值用分號分隔。字段的順序必須與數據定義中字段的順序相對應。新記錄必須具有不為空的明確標識。記錄中的日期必須與數據定義表中的DateFormat定義相對應。持續時間的解釋取決于時間單位的設置。它已預設為days,您可以在“ 常規”屬性頁面上對其進行修改。
為表和“ 常規”屬性頁上的每個對話框一致地定義了“ 日期”輸出格式。
或者,您也可以從CSV文件加載數據。該文件的結構必須與以下方案對應:
**** Maindata ****
1;Node 1;04.05.2015;;5;;Group 1;Group A;
2;Node 2;11.05.2015;;5;;Group 1;Group A;
3;Node 3;18.05.2015;;5;;Group 1;Group B;
**** Relations ****
1;1;2;
2;2;3;
每個記錄都有其自己的行。這些行的內容與對象類型VcDataRecordCollection的方法Add(...)傳遞的參數相對應。
首先列出Maindata數據表的記錄,然后是Relations數據表的記錄。使用****表名****標記記錄組的開頭。
如果您使用名稱intro.csv例如保存了這種文件,則可以按以下方式導入數據:
示例代碼C#
vcGantt1.Load(@"c:\intro.csv");指定表示的時間段
到現在為止,您不會看到任何活動,因為時間比例尚未調整為相應的時間段。時間刻度的顯示范圍可以通過屬性TimeScaleStart和TimeScaleEnd定義,也可以通過對象VcGantt的OptimizeTimeScaleStartEnd(...)方法從數據中確定。
示例代碼C#
private void Form1_Load(object sender, System.EventArgs e) { vcGantt1.ExtendedDataTablesEnabled = true; VcDataTable dataTable = vcGantt1.DataTableCollection.DataTableByName("Maindata"); VcDataRecordCollection dataRecCltn = dataTable.DataRecordCollection; dataRecCltn.Add(“ 1;節點1; 04.05.2015 ;; 5 ;; Group 1; Group A;” ); dataRecCltn.Add(“ 2;節點2; 11.05.2015 ;; 5 ;; Group 1; Group A;” ); dataRecCltn.Add(“ 3;節點3; 18.05.2015 ;; 5 ;; Group 1; Group B;” ); dataTable = vcGantt1.DataTableCollection.DataTableByName("Relations"); dataRecCltn = dataTable.DataRecordCollection; dataRecCltn.Add("1;1;2"); dataRecCltn.Add("2;2;3"); vcGantt1.EndLoading(); vcGantt1.OptimizeTimeScaleStartEnd(3); }如果您現在運行程序,結果應如下圖所示。
包含結束日期的表格列仍為空。可以使用VARCHART XGantt中包含的日歷從“ 開始”和“ 持續時間 ”字段中計算活動的結束時間。
在默認日歷中,將工作日(周一至周五)預定義為活動時間,將周末(周六和周日)定義為非活動時間。
您可以通過灰色背景識別圖中的非活動時間。通過禁用“ 節點”屬性頁面上的“ 節點使用日歷 ”選項,可以關閉日歷。
請注意使用和不使用日歷的計算差異:
如果激活了日歷,則從星期五開始并持續3天的活動將在星期二結束。沒有日歷,活動將在周日結束。
可以通過使用對象VcCalendar的AddDuration(...)方法來計算結束日期。這需要每個活動的開始和持續時間。可以通過它們的索引訪問這些字段。具有由該方法設置的結束日期之后set_DataField(...),該方法更新()的VcNode需要調用要顯示的修改。
示例代碼C#
foreach (VcNode node in vcGantt1.NodeCollection) { 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設置的日期放入工作時間,需要從結束日期和活動持續時間計算開始日期。
示例代碼C#
tmpDate = tmpCal.AddDuration((DateTime)node.get_DataField(3), (-1) * Convert.ToInt32(node.get_DataField(4))); node.set_DataField(2, tmpDate);為了保持數據的一致性,應將缺失的持續時間或缺失的持續時間視為不正確的,并將其重置為0。如果缺少開始日期,則無法計算結束日期。該代碼在名為SetNodeEndDate(...)的單獨方法中恢復。
示例代碼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"); // If the start date is empty then the end date should also be empty if (node.get_DataField(2).ToString() == "31.12.1899 00:00:00") node.set_DataField(3,""); else { // "Assign calendar to nodes" on the Nodes property page has to be checked 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 timespans tmpDate = tmpCal.AddDuration((DateTime)node.get_DataField(3), (-1) * Convert.ToInt32(node.get_DataField(4))); node.set_DataField(2, tmpDate); node.Update(); }日期的計算是必需的:
甲計算環路,它包括所有的節點都可以通過屬性設置NodeCollection所述的VcGantt對象。它的代碼將添加到事件Form1_Load(...)的末尾。
示例代碼C#
// Calculate end date for all nodes foreach (VcNode node in vcGantt1.NodeCollection) SetNodeEndDate(node);由用戶引起的數據更改可以通過事件VcNodeModifiedEx獲取。添加的方法調用將計算結束日期。
示例代碼C#
private void vcGantt1_VcNodeModifiedEx(object sender, VcNodeModifiedExEventArgs e) { switch (e.ModificationType) { case VcModificationTypes.vcAnything: //Node modified by Inplace Editor SetNodeEndDate(e.Node); break; default: break; } }如果API更改了數據值,則必須顯式調用SetNodeEndDate(...)方法。
想要了解甘特圖或慧都APS系統,請登錄慧都網,解決您的問題!
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: