VARCHART XGantt系列教程:如何在分組檢視中更好地顯示節點

ymy_666666發表於2019-01-31

VARCHART XGantt是一款功能強大的甘特圖控制元件,其模組化的設計讓您可以建立滿足需要的應用程式。XGantt可用於.NET,ActiveX和ASP.NET應用程式,可以快速、簡單地整合到您的應用程式中,幫助您識別效能瓶頸避免延遲以及高效利用資源,使複雜資料變得更加容易理解。

本文主要介紹如何在分組檢視中更好地顯示節點,有任何建議或提示請在下方評論區留言。

XGantt展示圖

在甘特圖中活動通常以組的形式展現,比如machine Gantt代表機器負載視覺化,它區分機器組和各自的機器,這被稱為雙階段分組。甘特圖的分組可以用來表示擴張或者收縮,這取決於你想從哪個角度檢視詳細資料。

有一個傳統甘特圖控制所面臨的問題:那就是通常節點只在一個組級別中顯示。那麼如何在甘特圖組中顯示節點?是在頂部摺疊或是在底部展開?在下文中將詳細介紹如何在組級別上視覺化節點,以及基於節點的單個組的排列如何增強甘特圖的資訊價值。

VARCHART XGantt的位移技巧

VARCHART XGantt是一款非常靈活的.Net甘特控制工具,僅通過少量的程式設計就可以針對面向時間的規劃資料進行幾乎所有視覺化需求定製。

當特定機器的甘特圖啟動時如果顯示崩潰,下面的示例將顯示機器組,而單個機器最初並沒有顯示,並且所有節點都顯示在頂層。

當展開機器組後,可以看到第二層單獨的機器。現在我們直觀的將節點從機器組移動到機器上(只需撤銷移動,節點就會再次出現在第一層)。

VARCHART XGantt系列教程:如何在分組檢視中更好地顯示節點

在一行中優化節點的排列

為了將節點排列在第一層和第二層,我們同時選擇了VARCHART XGantt模式all nodes in one rownodes optimized選項。這樣就可以實現:

  • 所有節點都顯示在彼此相鄰的一行中,這樣可以一眼看到機器的利用率。
  • 如果節點重疊,則顯示另一行,並且重疊的節點出現在新行中。
VARCHART XGantt系列教程:如何在分組檢視中更好地顯示節點

在第二層展開時更改節點排列

由於我們希望為planner提供儘可能詳細的檢視選項,所以我們將all nodes in one row更改為nodes in separate rows,方法是為第二個分組級別勾選相應的核取方塊。

在展開機器檢視時,每個節點將被清晰地安排在它自己的一行中,這樣規劃人員就可以識別出活動的確切時間。此外活動是按開始日期排序的,因此計劃人員可以很容易地立即找到下一個計劃的活動

VARCHART XGantt系列教程:如何在分組檢視中更好地顯示節點

在使用VARCHART XGantt分組檢視時進行節點排列

Step 1:

本例中不使用擴充套件資料表,在傳統的資料結構中,組是根據節點的分組標準自動建立的。VARCHART XGantt屬性頁上的設定如下:

  1. 第一個分組級別的組名
  2. 第二個分組級別的組名
  3. 虛擬分組資料欄位

如果第二個分組欄位為空,例如空字串,則VARCHART XGantt將各個節點排序到下一個最高階別的組中。不要簡單地將第二層的分組名稱替換為空字串,因為這樣肯定會刪除該值,並且無法再分配該值。這就是為什麼我們需要在需要時將空字串或第二層的分組名稱複製到其中的虛擬資料欄位(最初虛擬資料欄位將保持為空)。

Step 2:

接下來如果尚未指定,我們將在設定中為這兩個分組級別中的每一個建立GroupLevelLayout

  • 分組方式:分組欄位對應虛擬資料欄位
  • 單獨行中的節點:false
  • 節點優化:ture
  • 群體崩潰:ture

Step 3:

現在需要匯出VARCHART XGantt配置檔案,使用文字編輯器進行編輯,然後再次匯入。匯出的INI檔案會為每個分組級別顯示CreateGroupForEmptyEntry關鍵字,為了簡化問題,對於所有現有分組級別,這個關鍵字設定必須從YES改為NO。並且不要忘記為以後新增的所有分組級別再次設定此鍵

Step 4:

我們需要檢查哪個分組級別觸發了修改後的事件,參考以下程式碼:

  • 如果第一級被摺疊或展開,我們必須建立第二級,並通過foreach迴圈移動節點。
  • 如果第二層被摺疊或展開,我們必須在單線檢視或多線檢視之間切換。
private void vcGantt1_VcGroupModified(object sender, VcGroupModifiedEventArgs e)
 {
 vcGantt1.SuspendUpdate(true);
 if (e.Group.GroupingLevel == 0)
 {
 if (e.Group.Collapsed)
 {
 foreach (VcNode node in e.Group.NodeCollection)
 {
 node.set_DataField(DT.Maindata_GroupLvl2FieldIndex, "");
 node.Update();
 e.Group.NodesOptimized = true;
 e.Group.Update();
 }
 }
 else
 {
 foreach (VcNode node in e.Group.NodeCollection)
 {
 node.set_DataField(DT.Maindata_GroupLvl2FieldIndex,
 node.get_DataField(DT.Maindata_GroupLvl2DummyFieldIndex));
 node.Update();
 }
 }
 }
if (e.Group.GroupingLevel == 1)
 {
 if (e.Group.Collapsed)
 {
 e.Group.NodesArrangedInOneRow = true;
 e.Group.NodesOptimized = true;
 e.Group.Update();
 }
 else
 {
 e.Group.NodesArrangedInOneRow = false;
 e.Group.Update();
 }
 }
 vcGantt1.SuspendUpdate(false);
}複製程式碼


相關文章