所有产品 >> Ext Gantt Web甘特图控件 >> Web甘特图文档 >> 教程1-在网页上显示一个最基本的甘特图

教程1-在网页上显示一个最基本的甘特图

前言:本

extjs甘特图控件是基于extjs的最新版本构架的,如果你熟悉extjs的编程方式, 那么学习起来就非常容易;如果你以前没有接触过extjs,也没有关系,我们会教你一步一步的入门。

 

这是第一个网页甘特图程序,我们要完成以下功能
教学目标

1. 准备好网页甘特图数据

2. 在网页上显示一个最基本的甘特图

1. 准备数据

 

extjs甘特图可以接收xml、json、web服务等多种数据形式,下面以XML为例。

   

1
计划任务
2010-01-18T00:00:00-08:00 2010-02-02T00:00:00-08:00
40
null
false

...

在以上的数据结构中, 包含了一个任务的id,名称,开始时间,结束时间等等。xml的tag名称不一定非得是id,name,因为我们可以在以下的程序中再做一次映射。

2. 引入甘特图需要的文件

要使用extjs网页甘特图控件需要引入以下文件。

    
    
    
    
    
    
    
    
    
    
    
    

这些文件看起来有点多,但是相互分离, 减少相互之间的耦合性。 你可以直接拷贝到html中的head块内。

3.编写代码

然后我们就可以开始编写代码了,我们首先需要定义一个xml的读取器。

var myreader = new Ext.data.XmlReader({
                // records will have a 'Task' tag
                record: 'Task',
                idPath: "Id",
                fields : [
                    //以下数据是必须的,并且要和xml中匹配
     	            {name:'Id'},
                    {name:'Name', type:'string'},
                    {name:'StartDate', type : 'date', dateFormat:'c'},
                    {name:'EndDate', type : 'date', dateFormat:'c'},
                    {name:'PercentDone'},
                    {name:'ParentId', type: 'auto'},
                    {name:'IsLeaf', type: 'bool'},

                    // 以下是任务的附加数据                    
                    {name:'Responsible'}
                ]
            })

基于以上的xml读取器,我们要定义一个store

var taskStore = new Ext.ux.maximgb.tg.AdjacencyListStore({
            defaultExpanded : true,
    	    autoLoad : true,
            proxy : new Ext.data.HttpProxy({
                //我们需要到同级目录下的tasks.xml获取数据
                url : 'tasks.xml',
                method:'GET'
            }),
            //这是上面定义的reader
            reader: myreader 
});

最后就是定义一个甘特图了, 我们只需要用new构造一个甘特图的对象。

var g = new Sch.gantt.GanttPanel({
            //甘特图显示在什么位置
            renderTo : Ext.getBody(),
            leftLabelField : 'Name',
            //定义甘特图中的开始时间和结束时间
            startDate : new Date(2010,0,4), 
            endDate : Sch.util.Date.add(new Date(2010,0,4), Sch.util.Date.WEEK, 20), 
            //定义时间刻度
            viewPreset : 'weekAndDayLetter',
            // 甘特图左边显示的列
            columns : [
                {
                    header : 'Tasks', 
                    sortable:true, 
                    dataIndex : 'Name', 
                    locked : true,
                    width:250, 
                    editor : new Ext.form.TextField()
                }
            ],
            //刚才定义好的数据存取器
            taskStore : taskStore,
        });

这样,一个最基本的甘特图就做出来了。 最后的效果如以下所示。 它只是显示了任务(以列和图表的方式),但是并没有显示任务之间的关联关系,这个将会在下一节中讲述。

单击获得帮助