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

VARCHART XGantt是一款功能強大的甘特圖控件,其模塊化的設計讓您能夠建立知足須要的應用程序。XGantt可用於.NET,ActiveX和ASP.NET應用程序,能夠快速、簡單地集成到您的應用程序中,幫助您識別性能瓶頸避免延遲以及高效利用資源,使複雜數據變得更加容易理解。
node

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

XGantt展現圖

在甘特圖中活動一般以組的形式展示,好比machine Gantt表明機器負載可視化,它區分機器組和各自的機器,這被稱爲雙階段分組。甘特圖的分組能夠用來表示擴張或者收縮,這取決於你想從哪一個角度查看詳細數據。bash

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

VARCHART XGantt的位移技巧

VARCHART XGantt是一款很是靈活的.Net甘特控制工具,僅經過少許的編程就能夠針對面向時間的規劃數據進行幾乎全部可視化需求定製。編輯器

當特定機器的甘特圖啓動時若是顯示崩潰,下面的示例將顯示機器組,而單個機器最初並無顯示,而且全部節點都顯示在頂層。模塊化

當展開機器組後,能夠看到第二層單獨的機器。如今咱們直觀的將節點從機器組移動到機器上(只需撤銷移動,節點就會再次出如今第一層)。工具

在一行中優化節點的排列

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

  • 全部節點都顯示在彼此相鄰的一行中,這樣能夠一眼看到機器的利用率。
  • 若是節點重疊,則顯示另外一行,而且重疊的節點出如今新行中。

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

因爲咱們但願爲planner提供儘量詳細的視圖選項,因此咱們將all nodes in one row更改成nodes in separate rows,方法是爲第二個分組級別勾選相應的複選框。優化

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

在使用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);
}複製代碼
相關文章
相關標籤/搜索