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

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

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

在甘特图中活动通常以组的形式展现,比如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,方法是为第二个分组级别勾选相应的复选框。

在展开机器视图时,每个节点将被清晰地安排在它自己的一行中,这样规划人员就可以识别出活动的确切时间。此外活动是按开始日期排序的,因此计划人员可以很容易地立即找到下一个计划的活动

在使用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);
}复制代码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值