增加功能按钮
示例一
你可以打开CaseStudy目录下的文件“甘特图绑定状态.Table”。
打开这个项目的窗口,可以看到甘特图的工具栏多了个“标记任务”按钮,单击这个按钮,可以将当前任务的任务名单元格的样式设置为红底白字,再次单击则取消设置:
要实现这个功能,首先在窗口的AfterLoad事件中加上代码:
Dim
gv
As
GanttView = e.Form.Controls("GanttView1").GanttView
gv.Strip.Items.Add("cmdMark",
"标记任务",
"MarkCell16.ico",
StripItemTypeEnum.Button)
然后在GanttView的StripItemClick事件加上代码:
Dim
gv
As
GanttView = e.form.Controls("GanttView1").GanttView
If
e.StripItem.Name =
"cmdMark"
Then
Dim
tk
As
Gantt.Task = gv.SelectedTask
If
tk
IsNot
Nothing
Then
If
tk.FieldStyles.Count > 0
Then
'如果已经设置了样式
tk.FieldStyles.Clear
'则清除样式
Else
Dim
ft
As
New
Gantt.FieldStyle()
ft.Field = Gantt.StyleField.Name
'设置任务名称单元格
ft.BackColor = Color.Red
'红色背景
ft.ForeColor = Color.White
'白色字体
tk.FieldStyles.Add(ft)
'添加到样式集合
End
If
End
If
End
If
示例二
自带工具栏的"增加空白行"按钮,其实是在当前行位置增加一个空白任务,如果你觉得这样不方便,可以自己增加一个工具栏按钮。
首先在创库的AfterLoad事件加上代码:
Dim
gv
As
GanttView = e.form.Controls("GanttView1").GanttView
Dim
idx
As
Integer
= gv.Strip.Items("tsbAddBlankRow").Index
'获得原来的增加空白行按钮的位置
gv.Strip.Items("tsbAddBlankRow").ToolTip
=
"插入空白行"
'将其提示改为"插入空白行"
gv.Strip.Items.Insert(idx,
"cmdAddBlankRow",
"增加空白行",
"AddRow16.ico",
StripItemTypeEnum.Button)
'插入一个按钮用于增加空白行
然后在GanttView的StripItemClick事件加上代码:
Dim
gv
As
GanttView = e.form.Controls("GanttView1").GanttView
If
e.StripItem.Name =
"cmdAddBlankRow"
Then
Dim
tk
As
New
Gantt.Task
gv.tasks.add(tk)
gv.SelectedTaskIndex = gv.Tasks.Count - 1
End
If
示例三
你可以打开CaseStudy目录下的文件“甘特图非绑定状态.Table”,参考其中的窗口“甘特图2”。
之前在导出数据到DataTable这一节,,我们通过在窗口增加一个普通按钮来导出数据。
你可以不用普通按钮,直接在GanttView自带的工具栏中加上一个按钮用于导出数据:
实现过程很简单:
1、在窗口的AfterLoad事件加上代码:
Dim
gv
As
GanttView = e.Form.Controls("GanttView1").GanttView
gv.Strip.Items.Add("cmdExport",
"导出数据",
"datalist.ico",StripItemTypeEnum.Button)
2、然后在GanttView的StripItemClick事件加上代码:
If
e.StripItem.Name =
"cmdExport"
Then
Dim
gv
As
GanttView = e.Form.Controls("GanttView1").GanttView
DataTables("任务").DataRows.Clear()
DataTables("前驱任务").DataRows.Clear
DataTables("资源分配").DataRows.Clear
DataTables("资源定义").DataRows.Clear
For
Each
rs
As
Gantt.Resource
In
gv.Resources
'变量资源定义
Dim
dr
As
DataRow = DataTables("资源定义").AddNew()
dr("资源ID")
= rs.ID
dr("资源名称")
= rs.Name
dr("资源类型")
= rs.ResourceType
dr("计量单位")
= rs.UnitOfMeasure
dr("单位成本")
= rs.Cost
Next
For
Each
tk
As
Gantt.Task
In
gv.Tasks
'变量全部任务
Dim
tr
As
DataRow = DataTables("任务").AddNew()
tr("任务ID")
= tk.ID
tr("任务名")
= tk.Name
tr("类型")
= tk.Mode
tr("摘要")
= tk.Summary
tr("开始日期")
= tk.Start
tr("结束日期")
= tk.Finish
tr("持续天数")
= tk.Duration
tr("完成百分比")
= tk.PercentComplete
tr("父任务ID")
= tk.OutlineParentID
'也就是所属摘要任务的ID
For
Each
pk
As
Gantt.Predecessor
In
tk.Predecessors
'遍历这个任务的前驱任务
Dim
pr
As
DataRow = DataTables("前驱任务").AddNew()
pr("任务ID")
= tk.ID
pr("任务名称")
= tk.Name
pr("前驱任务ID")
= pk.PredecessorTaskID
pr("前驱任务名称")
= pk.PredecessorTask.Name
pr("前驱类型")
= pk.PredecessorType
pr("延迟天数")
= pk.Lag
Next
For
Each
rs
As
Gantt.ResourceRef
In
tk.ResourceRefs
'遍历这个任务用到的资源
Dim
zr
As
DataRow = DataTables("资源分配").AddNew()
zr("任务ID")
= tk.ID
zr("任务名称")
= tk.Name
zr("资源ID")
= rs.ResourceID
zr("资源名称")
= rs.Resource.Name
zr("资源用量")
= rs.Amount
zr("资源单价")
= rs.Resource.Cost
Next
Next
End
If
重要提示:
自行增加的功能按钮,name属性不能以"ts"开头,否则不会触发事件。