VARCHART XGantt系列教程:如何在分组视图中更好地显示节点

VARCHART XGantt是一款功能强大的甘特图控件,其模块化的设计让您能够建立知足须要的应用程序。XGantt可用于.NET,ActiveX和ASP.NET应用程序,能够快速、简单地集成到您的应用程序中,帮助您识别性能瓶颈避免延迟以及高效利用资源,使复杂数据变得更加容易理解。node

本文主要介绍如何在分组视图中更好地显示节点,有任何建议或提示请在下方评论区留言。编程

XGantt展现图

在甘特图中活动一般以组的形式展示,好比machine Gantt表明机器负载可视化,它区分机器组和各自的机器,这被称为双阶段分组。甘特图的分组能够用来表示扩张或者收缩,这取决于你想从哪一个角度查看详细数据。数据结构

有一个传统甘特图控制所面临的问题:那就是一般节点只在一个组级别中显示。那么如何在甘特图组中显示节点?是在顶部折叠或是在底部展开?在下文中将详细介绍如何在组级别上可视化节点,以及基于节点的单个组的排列如何加强甘特图的信息价值。编辑器

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);
}
相关文章
相关标签/搜索