`
hackbomb
  • 浏览: 216555 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

grid的继承类,构建方便的grid操作

    博客分类:
  • Ext
阅读更多

在以往建立grid的时都要建立很多的辅助类,比如store,column和record等等。尤其当一个页面里面有多个grid的时候,这样会有很多的冗余代码。使页面加载很忙。
因此自己找了相关的文件,写了一个grid的扩展类。使建立grid只需几行代码就可完成。

以下为扩展文件。其扩展类的名字为Ext.ux.grid.SimpleGrid。文件名字为:Ext.ux.grid.SimpleGrid.js
详细内容请查看代码。


// 重新扩展的grid组建
   Ext.namespace("Ext.ux.grid");  
   Ext.ux.grid.SimpleGrid = Ext.extend(Ext.grid.GridPanel, {  
       // 表格结构  
        structure : '', 
     
     
     
      //reader类型如果当为json的时候那么url不能空,当为array的时候dataObject不能为空
      readType:'json',
      // 获取数据的URL  
        url : '',  
      // 关键字段  
        keyField : '',  
      //数据对象
      dataObject:null,
      
      
      
        //是否需要分组,默认为false,如果设置为true须再设置两个参数一个为myGroupField和myGroupTextTpl
      needGroup:false,
      //分组的字段名称
      myGroupField:'',
      //分组显示的模板,eg:{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})
      myGroupTextTpl:'',
     
     
     
      //列模式的选择模式,默认为rowselectModel,如果相设置成check模式,就设置为check
      selectType:'',
     
     
     
     
        // 默认排序字段  
        defaultSortField : '',  
     
     
     
     
        // 是否需要分页工具栏,默认为true 
        needPage : true,  
 
        frame : false,  
       
      //是否带展开按钮,默认为false
        collapsible : false,  
 
        animCollapse : true,  
 
        loadMask : true,  
 
        viewConfig : {  
            forceFit : true 
        },  
 
        // private  
        initComponent : function() {  
            if (this.structure != '') {  
                this.initStructure();  
            }  
 
            Ext.ux.grid.SimpleGrid.superclass.initComponent.call(this);  
 
        },  
 
        // private  
        initEvents : function() {  
            Ext.ux.grid.SimpleGrid.superclass.initEvents.call(this);  
 
           /* this.getStore().load( {  
                params : {  
                    start : 0,  
                    limit : 30  
                }  
            });  
 
            */if (this.loadMask) {  
                this.loadMask = new Ext.LoadMask(this.bwrap, Ext.apply( {  
                    store : this.store  
                }, this.loadMask));  
            }  
        },  
 
        // private  
        initStructure : function() {  

            var oCM = new Array();   //列模式数组
            var oRecord = new Array();  //容器对数组
            // 构成grid的两个必须组件: column和record,根据structure将这两个组件创建出来
        
         //判断表格的选择模式
         if(this.selectType=='check'){
            var sm = new Ext.grid.CheckboxSelectionModel();
            oCM[oCM.length] = sm;//在列模式数组中添加checkbox模式按钮
            this.selModel = sm;//并将selModel设置为check模式
         }
        
         var len = this.structure.length;//得到结构的长度
            for (var i = 0;i < len; i++) {  
                var c = this.structure[i];  
                // 如果字段为hidden,则不生成filters和columnMode  
                if (c.hidden == undefined || !c.hidden) {  
                    oCM[oCM.length] = {  
                        header : c.header,  
                        dataIndex : c.name,  
                        width : c.width,  
                        // 类型为数字则右对齐  
                        align : c.type == 'numeric' ? 'right' : 'left',  
                        // 结构的渲染函数  
                        renderer : c.renderer
                    };  
                }  
                oRecord[oRecord.length] = {  
                    name : c.name,  
                    // 如果类型不是date型则全部为string型  
                    type : c.type == 'date' ? 'date' : 'string' 
                };  
            }  
            // 生成columnModel
            this.cm = new Ext.grid.ColumnModel(oCM);  
            //this.colModel = this.cm;  
            // 默认可排序  
            this.cm.defaultSortable = true;  

            // 生成表格数据容器  
            var record = Ext.data.Record.create(oRecord);  
        
         //判断读取类别,目前只实现了,jsonreader和arrayReader
         var reader;
         switch (this.readType){
            case 'json':
           
               reader = new Ext.data.JsonReader( {  
                  totalProperty : "totalCount",  
                  root : "result",  
                  id : this.keyField  //关键字段
               }, record); 
              
               this.ds = new Ext.data.GroupingStore( {  
                  proxy : new Ext.data.HttpProxy( {  
                     url : this.url  
                  }),  
                  reader : reader,  
                  sortInfo : {field : this.defaultSortField,direction : 'ASC'  },  
                  remoteSort : true ,
                  groupField:this.myGroupField
               });  
               break;
              
            case 'array':
               reader = new Ext.data.ArrayReader({},record);
              
               this.ds = new Ext.data.GroupingStore({
                  reader: reader,
                  data: this.dataObject,
                  sortInfo : {field : this.defaultSortField,direction : 'ASC'  },
                  groupField:this.myGroupField
               });
              
               break;
              
            default:
               break;
           
         }
        
         //判断是否需要分组
         if(this.needGroup){
            this.view = new Ext.grid.GroupingView({
               forceFit:true,
               groupTextTpl:this.myGroupTextTpl
            })
         }

            this.store = this.ds;  
            // 生成分页工具栏  
           /* if (this.needPage) {  
                var pagingToolbar = new Ext.PagingToolbar( {  
                    displayInfo : true,  
                    displayMsg : '当前记录数: {0} - {1} 总记录数: {2}',  
                    emptyMsg : '没有符合条件的记录',  
                    store : this.ds
                });  
                pagingToolbar.pageSize = 30;  
                this.bbar = pagingToolbar;  
                this.bottomToolbar = this.bbar;  
            }   */
            // 将filter加入grid  
           // this.plugins = filters;  
        }  
    });  

它的用法如下:
首先先引用写好的扩展文件。在页面中把ext核心文件加载后,再建在Ext.ux.grid.SimpleGrid.js文件。
例如:<script src = 'Ext.ux.grid.SimpleGrid.js'></script>
在页面中:


<html>
<head>
<!--引用所有的ext的核心文件 -->
....代码略
<!--引用Ext.ux.grid.SimpleGrid.js文件 -->
....代码略

</head>
<body>
<div id="emp3-grid"><div>
<script language="javascript">
//本例是一个数组grid
                var myGridData = [//数据源
         [1,'01','局长','局级干部……'],
         [2,'02','处长','处级干部……'],
         [3,'03','科长','科长干部……'],
         [4,'04','科员','普通科员……'],
         [5,'05','职员','普通职员……']
      ];
     
      var gridStructure = [//grid的数据结构
      {
         name:"stat_id",
         header:"岗位编号",
         hidden:true
      },{  
         name : 'stat_sn',  
         header : "岗位排序号",  
         width : 50  
      },{  
         name : 'stat_name',  
         header : "岗位名称", 
         width : 130  
      },{
         name:"stat_desc",
         header:"岗位描述",
         width:130

      }]; 
                   var  myUxGrid = new Ext.ux.grid.SimpleGrid({//创建岗位的tab面板信息
         id : 'dept-center-stat-grid',  
         // url : 'getBasicUnits.action', 
         readType:'array', //确定数据源类型的参数
         selectType:'check',
         dataObject:myGridData ,
         defaultSortField : 'stat_sn',  
         // keyField : 'basicUnitNo',  
         structure: gridStructure,    
         width : 700,  
         //height : 600,  
         title : '岗位信息'  ,
         renderTo:'temp3-grid'
      });
</script>
</body>
</html>

分享到:
评论

相关推荐

    C# 自定义属性在propertyGrid控件中显示 演示demo

    在开发用户界面时,`PropertyGrid`控件是一个非常实用的工具,它能够自动显示对象的公共属性、方法和事件,使得用户可以方便地查看和修改这些成员的值。本教程将深入探讨如何在`PropertyGrid`控件中自定义属性的显示...

    Extjs Grid 扩展实例

    ExtJS Grid是一个强大的数据展示组件,它在Web应用程序中用于显示和操作大量数据。...通过这个实例,开发者不仅可以学习到如何构建功能完善的表格,还能掌握如何根据业务需求定制Grid,提升Web应用的数据管理能力。

    Ext grid合并单元格

    首先,创建了一个名为 `MyGridView` 的类,该类继承自 `Ext.grid.GridView`。然后,重写了 `renderHeaders` 方法,该方法负责生成 Grid 的表头 HTML 结构。 ```javascript MyGridView = Ext.extend(Ext.grid....

    PropertyGrid三个例子

    综上所述,`PropertyGrid`控件是.NET开发中一个非常实用的组件,通过各种属性和方法,我们可以构建出功能丰富的用户界面,方便用户交互和配置对象属性。在提供的"PropertyGrid三个例子"中,我们可以看到如何利用`...

    SAP ALV GRID介绍

    ALV Grid 的继承结构是指 `CL_GUI_ALV_GRID` 类的继承关系,这是ALV Grid 控制器的核心类。 #### 四、ALV Grid 控制器的控制结构 ALV Grid 控制器涉及多种控制结构,其中最重要的是字段目录(Field Catalog)。字段...

    propertyGrid 用法示例

    通过继承`UITypeEditor`类并重写其方法,可以创建自己的编辑器,然后通过`EditorAttribute`将其关联到特定属性。 总之,`PropertyGrid`控件是一个强大的工具,能够帮助开发者快速构建配置或设置界面。通过理解和...

    IGrid25CRack

    在.NET开发环境中,控件是构建用户界面的基本元素,它们为开发者提供了丰富的功能和便捷的操作方式。标题"IGrid25CRack"提到的是一种专为.NET平台设计的网格控件,据描述称,它在功能和性能上相比Visual Studio自带...

    ext grid 显示数据

    通过继承和扩展EXT JS的API,开发者可以构建功能强大的数据视图。 通过阅读"5_使用Grids显示数据.doc"文档,你可以更深入地了解EXT JS Grid的用法和实践,包括如何配置和使用上述功能,以及解决实际项目中的问题。...

    ExtJS4.0 分享GridHeaderFilters插件

    这需要继承`Ext.grid.filter.Filter`类,并重写相关方法。 8. **本地过滤与服务器过滤**: 对于大数据量,你可能需要在服务器端进行过滤,这时你需要在`store`中配置`remoteFilter: true`,并将过滤条件发送到...

    PropertyGrid c++ vs2008

    `CMFCPropertyGridCtrl`是MFC实现`PropertyGrid`功能的类。它继承自`CWnd`,并添加了对属性列表的操作和管理。通过`CMFCPropertyGridCtrl`,你可以创建一个包含多个属性的网格,并为每个属性指定名称、值和描述。你...

    MFC.grid.code.choices.rar_MFC 表格_MFC表格_grid_grid control_mfc gri

    MFC封装了Windows API,提供了面向对象的接口,使得开发者能够更方便地使用Windows操作系统的服务。在这个主题中,我们关注的是MFC中的表格控件——Grid Control。 表格控件在用户界面设计中扮演着重要角色,它允许...

    WPF可继承窗体

    标题"**WPF可继承窗体**"指的是如何设计一个基本的WPF窗口,使其能够作为其他窗口的基础类,这样子类就可以继承其样式和功能。 WPF提供了一个强大的框架,允许开发者定义丰富的用户界面和交互体验。窗体(Window)...

    extgrid 封装

    - 创建一个新的JavaScript类,继承自Ext.grid.Panel或者Ext.grid.Viewport。 - 在类中定义配置属性,如store、columns、tools等,以满足各种场景需求。 - 实现加载数据、刷新、排序等功能的方法。 - 设计好公共...

    一个简单GRID控件

    GRID控件在WinForms中主要是通过`DataGridView`类来实现的。`DataGridView`是微软.NET Framework 2.0引入的一个新控件,它取代了旧版的`DataGrid`控件,提供更强大、更灵活的功能。这个控件能够方便地与各种数据源...

    s60下一个Grid控件的实用实例

    Grid控件则是CControl的子类,我们可以通过继承和扩展这些类来实现自定义功能。 为了创建一个Grid控件,我们需要做以下步骤: 1. **创建一个新的CActive派生类**:在S60平台上,大多数UI元素都是活动对象(CActive...

    EXT中文手册 Grid Form

    `Element`类不仅简化了DOM操作的复杂性,还提供了一套完整的API用于处理DOM节点。 **获取多个DOM的节点** 要获取DOM节点,可以使用`Ext.get()`方法。如果传入的ID对应多个元素,则会返回一个包含这些元素的数组。...

    symbian Grid列表的应用

    综上所述,Symbian Grid列表的应用涵盖了界面设计、事件处理、性能优化等多个方面,它是构建Symbian应用中不可或缺的一部分,为用户提供直观、高效的操作体验。通过熟练掌握Grid List的开发技巧,开发者可以创建出更...

    对UGUI的GridLayoutGroup组件进行拓展.rar

    1. **自定义布局算法**:通过继承GridLayoutGroup并重写其核心布局方法,如CalculateCellSize和ArrangeChildren,可以实现特定的网格布局规则。 2. **扩展属性**:增加自定义属性,如添加新的约束选项、单元格间的...

    An Easy Reference for ALV Grid Control

    因此,不建议继承此类类来访问受保护的对象。这样做可能会增加后续升级的难度。 #### 目标 本文档的目标是提供一个简单明了的参考文档,帮助开发人员在编写使用 ALV Grid 控制构建列表的代码时更加高效。尽管关于...

Global site tag (gtag.js) - Google Analytics