选择模型

    当单击某一单元格时,需要被选中的为整行,则使用RowSelectionModel----行选择模型。行选择模型默认是支持多选的,如只能单选,需要设置singleSelect参数。

1EXTJS----GRID笔记2_gridvar grid = new Ext.grid.GridPanel ({
2EXTJS----GRID笔记2_Extjs_02    renderTo : 'grid',
3EXTJS----GRID笔记2_Extjs_02    store : store,
4EXTJS----GRID笔记2_Extjs_02    cm : cm,
5EXTJS----GRID笔记2_Extjs_05    sm : new Ext.grid.RowSelectionModel({singleSelect:true})
6EXTJS----GRID笔记2_Extjs_06)}
;


表格视图---Ext.grid.GridView
   
Ext的表格控件都遵循MVC模型,Ext.data.Store可看做Model模型,Ext.grid.GridPanel中设置各种监听器可看做Controller控制器,而Ext.grid.GridView对应的就是View视图。通常情况下,不需要自行创建Ext.grid.GridView的实例,GridPanel会自行生成对应的实例,并可通过getView()函数来获取当前表格使用的视图实例。

1EXTJS----GRID笔记2_grid_07Ext.get('scroll').on('click',function(){
2EXTJS----GRID笔记2_Extjs_02    grid.getView().scrollToTop();
3EXTJS----GRID笔记2_Extjs_06}
)


    当然,我们也可以为GridView设置初始参数:

1EXTJS----GRID笔记2_grid_10viewConfig:{
2EXTJS----GRID笔记2_Extjs_02    columnsText:'显示的列',
3EXTJS----GRID笔记2_Extjs_02    scrollOffset:30,  //表格右侧滚动条的宽度,默认是20px
4EXTJS----GRID笔记2_Extjs_02    sortAscText:'升序',
5EXTJS----GRID笔记2_Extjs_02    sortDescText:'降序',
6EXTJS----GRID笔记2_Extjs_02    forceFit:true
7EXTJS----GRID笔记2_Extjs_06}


后台排序
    
Grid的后台排序只需在配置Ext.data.Store的时候配置remoteSort:true即可,这样下次排序的时候,Store会向后台提交两个参数:sort和dir。sort表示需要排序的字段,dir表示升序或降序(ASC/DESC)。

属性表格控件----PropertyGrid

 1EXTJS----GRID笔记2_Extjs_17var gird = new Ext.grid.PropertyGrid({
 2EXTJS----GRID笔记2_Extjs_02    title:'属性表格',
 3EXTJS----GRID笔记2_Extjs_02    autoHeight:true,
 4EXTJS----GRID笔记2_Extjs_02    width:300,
 5EXTJS----GRID笔记2_Extjs_02    renderTo:'grid1',
 6EXTJS----GRID笔记2_grid_22    source:{
 7EXTJS----GRID笔记2_Extjs_02        "名字":"不告诉你",
 8EXTJS----GRID笔记2_Extjs_02        "创建时间":new Date(Date.parse('12/15/2007')),
 9EXTJS----GRID笔记2_Extjs_02        "是否有效":false,
10EXTJS----GRID笔记2_Extjs_02        "版本号":.01,
11EXTJS----GRID笔记2_Extjs_02        "描述":"恩,估计没有啥可说的"
12EXTJS----GRID笔记2_Extjs_28    }

13EXTJS----GRID笔记2_Extjs_06}
);


        上述代码就很容易地构建出一个可编辑的Grid,且各个字段的编辑器都是对应的。如果需要只能看不能动的PropertyGrid,则:

 

1EXTJS----GRID笔记2_grid_30grid.on("beforeedit",function(e){
2EXTJS----GRID笔记2_Extjs_02    e.cancel = true;
3EXTJS----GRID笔记2_Extjs_02    return false;
4EXTJS----GRID笔记2_Extjs_06}
);


    如果需要强制对name列排序,则需要修改Ext.grid.PropertyGrid.prototype.initComponent源码,将store.store.sort('name','ASC')注释掉即可。
    下面示例了自定义编辑器的代码:

 1EXTJS----GRID笔记2_grid_34var grid = new Ext.grid.PropertyGrid({
 2EXTJS----GRID笔记2_Extjs_02    title:'表格属性',
 3EXTJS----GRID笔记2_Extjs_02    autoHeight:true,
 4EXTJS----GRID笔记2_Extjs_02    width:300,
 5EXTJS----GRID笔记2_Extjs_02    renderTo:'grid',
 6EXTJS----GRID笔记2_grid_39    customEditors:{
 7EXTJS----GRID笔记2_Extjs_40        'Start Time':new Ext.grid.GridEditor(new Ext.form.TimeField({selectOnFocus:true}))
 8EXTJS----GRID笔记2_Extjs_28    }
,
 9EXTJS----GRID笔记2_Extjs_42    soruce:{
10EXTJS----GRID笔记2_Extjs_02        'Start Time':'10:00 AM'
11EXTJS----GRID笔记2_Extjs_28    }

12EXTJS----GRID笔记2_Extjs_06}
);


分组表格控件----Group

 1EXTJS----GRID笔记2_Extjs_46var reader = new Ext.data.ArrayReader({},[
 2EXTJS----GRID笔记2_Extjs_47    {name:'id'},
 3EXTJS----GRID笔记2_grid_48    {name:'sex'},
 4EXTJS----GRID笔记2_Extjs_49    {name:'name'},
 5EXTJS----GRID笔记2_Extjs_50    {name:'desc'}
 6EXTJS----GRID笔记2_grid_51]);
 7EXTJS----GRID笔记2_grid_51
 8EXTJS----GRID笔记2_grid_51var data = [
 9EXTJS----GRID笔记2_grid_51    [1,'male','name1','descn1'],
10EXTJS----GRID笔记2_grid_51    [2,'female','name2','descn2'],
11EXTJS----GRID笔记2_grid_51    [3,'male','name3','descn3'],
12EXTJS----GRID笔记2_grid_51    [4,'female','name4','descn4'],
13EXTJS----GRID笔记2_grid_51    [5,'male','name5','descn5']
14EXTJS----GRID笔记2_grid_51];
15EXTJS----GRID笔记2_grid_51
16EXTJS----GRID笔记2_grid_61var store = new Ext.data.GroupingStore({
17EXTJS----GRID笔记2_grid_62    reader:reader,
18EXTJS----GRID笔记2_grid_62    data:data,
19EXTJS----GRID笔记2_grid_62    groupField:'sex',
20EXTJS----GRID笔记2_grid_65    sortInfo:{field:'id',direction:"ASC"}
21EXTJS----GRID笔记2_grid_66}
);
22EXTJS----GRID笔记2_grid_51
23EXTJS----GRID笔记2_Extjs_68var grid = new Ext.grid.GridPanel({
24EXTJS----GRID笔记2_grid_62    store:store,
25EXTJS----GRID笔记2_grid_62    height:300,
26EXTJS----GRID笔记2_grid_62    columns:[
27EXTJS----GRID笔记2_Extjs_72        {header:'编号',dataIndex:'id'},
28EXTJS----GRID笔记2_grid_73        {header:'性别',dataIndex:'sex'},
29EXTJS----GRID笔记2_Extjs_74        {header:'名称',dataIndex:'name'},
30EXTJS----GRID笔记2_Extjs_75        {header:'描述',dataIndex:'desc'}
31EXTJS----GRID笔记2_grid_62    ],
32EXTJS----GRID笔记2_grid_62    view:new Ext.grid.GroupingView(),
33EXTJS----GRID笔记2_grid_62    renderTo:'grid'
34EXTJS----GRID笔记2_grid_66}
);

    
    上述示例需要关注的是groupField,确定通过哪一项分组。令人困惑的是,GroupingStore要求必须设置sortInfo。同样,也可以通过grid.getView()来获取到Ext.grid.GroupingView的实例。

可拖放的表格
    

1EXTJS----GRID笔记2_grid_80var rz = new Ext.Resizable('grid',{
2EXTJS----GRID笔记2_grid_62    wrap:true,
3EXTJS----GRID笔记2_grid_62    minHeight:100,
4EXTJS----GRID笔记2_grid_62    pinned:true,
5EXTJS----GRID笔记2_grid_62    handles:'s'
6EXTJS----GRID笔记2_grid_66}
);
7EXTJS----GRID笔记2_grid_51
8EXTJS----GRID笔记2_grid_51rz.on('resize',grid.syncSize,grid);

    
    Resizable必须放在render之后,否则会出现问题。参数的构成:
    第一个参数'grid':就是说这个可改变大小的条是在div id="grid"这个元素上起作用。
    wrap:true  这个参数会在构造Resizable时自动在指定id的外部包裹一层div。
    minHeight:100  限制改变大小的最小高度。
    pinned:true    pinned就是显示蓝色细线和上面的三个小点,突出提示。如果为true,则一直显示;false则只当鼠标放到上面时才出现。
    handles:'s'    's'即'south'。Ext中的东南西北对应上下左右,用来设置拖动的方向。

在同一个表格里拖放
    
只需将grid的属性enableDragDrop设置为true,表格就支持了拖拽。但这样还不能实现真正意义上的拖拽,总会显示一个禁止放下的图标。这是因为Grid里面没有设置DropTarget,就是放置被拖动数据的目标。对grid.container进行如下设置,让表格的容器成为DropTarget:

 

 1EXTJS----GRID笔记2_grid_88var ddrow = new Ext.dd.DropTarget(grid.container,{
 2EXTJS----GRID笔记2_grid_62    ddGroup:'GridDD',
 3EXTJS----GRID笔记2_grid_62    copy:false,
 4EXTJS----GRID笔记2_grid_91    notifyDrop:function(dd,e,data){
 5EXTJS----GRID笔记2_grid_62        //选中了多少行
 6EXTJS----GRID笔记2_grid_62        var rows = dd.getDragData(e).rowIndex;
 7EXTJS----GRID笔记2_grid_62        if (typeof(index) == 'undefined')
 8EXTJS----GRID笔记2_Extjs_95        {
 9EXTJS----GRID笔记2_grid_62            return
10EXTJS----GRID笔记2_Extjs_97        }

11EXTJS----GRID笔记2_grid_62
12EXTJS----GRID笔记2_grid_62        //修改store
13EXTJS----GRID笔记2_Extjs_100        for(i = 0 ; i < rows.length;i++{
14EXTJS----GRID笔记2_grid_62            var rowData = rows[i];
15EXTJS----GRID笔记2_grid_62            if (!this.copy) store.remove(rowData);
16EXTJS----GRID笔记2_grid_62            store.insert(index,rowData);
17EXTJS----GRID笔记2_Extjs_97        }

18EXTJS----GRID笔记2_Extjs_97    }

19EXTJS----GRID笔记2_grid_66}
);


Grid与右键菜单
    
Grid提供了4个与右键菜单有关的事件:
    contextmenu : (Ext.EventObject e): 全局性的右键事件
    cellcontextmenu:(Grid this,Number rowIndex, Number cellIndex,Ext.EventObject e): 单元格的右键事件
    rowcontextmenu:(Grid this,Number rowIndex, Ext.EventObject e): 行上的右键事件
    headercontextmenu:(Grid this,Number colIndex, Ext.EventObject e): 表头的右键事件

原文地址:http://www.blogjava.net/zhengzhili/archive/2009/10/21/299161.html