`
czh0622
  • 浏览: 15182 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

动态构建grid

    博客分类:
  • ext
阅读更多

本代码可重用,在工作中我经常使用。

//定义grid的复选框

var sm = new Ext.grid.CheckboxSelectionModel();

//这里可以根据条件设置是否可选,当然不需要可以不用监听此事件
    sm.on('beforerowselect',function(SelectionModel, rowIndex, keepExisting,record){
        if(condition){
             return true;
        }else{
            return false;
        }
    });

//定义json列

var jsonFields =  [{name:'field1'},{name:'field2'}];

//定义gridColumn

var gridColumn =
        [
           sm,
           {header:'列1',width:148,sortable:false,dataIndex:'field1'},

           {header:'列2',width:148,sortable:false,dataIndex:'field2'}

        ];

/**

*定义动态获取grid方法

*fields 数据列

*column grid列

*title grid标题名

*result 传入的json数据,这个需要自己定义,或从后台返回,可以传入空数据{data:[]}

*root 数据key

*sm  CheckboxSelectionModel对象

*form 表单对象,一般的数据操作都会跟表单关联,没有则可为null

*gridHeight 定义grid的高度

**/

var getGridPanel = function(fields,column,title,result,root,sm,form,gridHeight){
    var store = new Ext.data.JsonStore({
        fields:fields,
        data:result,
        root:root,
        autoLoad:false
    });
    var cm = new Ext.grid.ColumnModel(column);
    var gridPanel = new Ext.grid.GridPanel({
        form:form,
        header:false,
        importData:result,
        tbar:[
              {
                  text:'全屏查看',
                  iconCls:'preview',
                  id:'screen',
                  handler:function(){
                      screenView(grid);
                  }
              },{
                  text:'删除',
                  iconCls:'item-delete',
                  handler:function(){
                      var records = gridPanel.getSelectionModel().getSelections();
                      if(0 == records.length){
                          Ext.MessageBox.show({
                                title : '提示',
                                msg : '请选择要删除的数据',
                                buttons : Ext.MessageBox.OK,
                                icon : Ext.MessageBox.INFO
                            });
                      }else{
                          Ext.MessageBox.confirm('确认', '是否确定删除选重的信息?', function(btns) {
                              if (btns == 'yes') {
                                  gridPanel.getStore().remove(records);
                                  //updateUserInfo(form); //我这里是同步更新表单数据
                              }
                          });
                      }
                  }
              },{
                  text:'审核通过',
                  iconCls:'setIsTop',
                  handler:function(){
                      var records = gridPanel.getSelectionModel().getSelections();
                      if(0 == records.length){
                          Ext.MessageBox.show({
                                title : '提示',
                                msg : '请选择要操作的数据',
                                buttons : Ext.MessageBox.OK,
                                icon : Ext.MessageBox.INFO
                            });
                      }else{
                          Ext.MessageBox.confirm('确认', '是否要接受选中学员的报名申请?', function(btns) {
                              if (btns == 'yes') {
                                  for(var i=0;i<records.length;i++){
                                      records[i].data['APPLY_STATUS'] = '2'; //设置某一列的状态值
                                  }
                                  updateUserInfo(form); //同步更新表单数据
                                  var data = form.find('name','QP_USER_APPLYS.USER_INFO')[0].getValue();
                                  gridPanel.getStore().loadData(Ext.decode(data)); //重新加载grid的数据
                              }
                          });
                      }
                  }
              },{
                  text:'审核不通过',
                  iconCls:'setIsTopDown',
                  handler:function(){
                      var records = gridPanel.getSelectionModel().getSelections();
                      if(0 == records.length){
                          Ext.MessageBox.show({
                                title : '提示',
                                msg : '请选择要操作的数据',
                                buttons : Ext.MessageBox.OK,
                                icon : Ext.MessageBox.INFO
                            });
                      }else{
                          Ext.MessageBox.confirm('确认', '是否要取消选中学员的申请?', function(btns) {
                              if (btns == 'yes') {
                                  for(var i=0;i<records.length;i++){
                                      records[i].data['APPLY_STATUS'] = '3';
                                  }
                                  updateUserInfo(form);
                                  var data = form.find('name','QP_USER_APPLYS.USER_INFO')[0].getValue();
                                  gridPanel.getStore().loadData(Ext.decode(data));
                              }
                          });
                      }
                  }
              }
        ],
        id:'applyInfo',
        //autoExpandColumn:'ID_CARD',
        title:title,
        forceFit:true,
        height:gridHeight,
        autoScroll:true,
        store : store,
        collapsible:false,
        enableHdMenu : false,
        cm : cm,
        sm : sm,
        stripeRows : false,
        frame : false,
        region : 'center',
        viewConfig:{

           //根据某一行的列值设置行的颜色
            getRowClass : function(record,rowIndex,rowParams,store){
                 if(record.data.APPLY_STATUS == '3'){
                     return "x-grid-record-red";
                 }
                 if(record.data.APPLY_STATUS == '2'){
                     return "x-grid-record-green";
                 }
            }
        }
    });
    return gridPanel;
}

 

//更新用户数据信息
function updateUserInfo(form){
  var result = [];
  var st = grid.getStore();
  st.each(function(r){
      result.push(r.data);
  });
  var del_data = {"data":result};
  //删除数据后更新用户信息数据
  form.find('name','QP_USER_APPLYS.USER_INFO')[0].setValue(Ext.encode(del_data).replace(/\\/g,''));
}

 

//定义动态添加样式函数
 var addStyle = function(rules) {
        var styleElement = document.createElement('style');
        styleElement.type = 'text/css';
        if ( Ext.isIE ) {   // 判断IE浏览器
            styleElement.styleSheet.cssText = rules;
        }
        else {
            var frag = document.createDocumentFragment();
            frag.appendChild(document.createTextNode(rules));
            styleElement.appendChild(frag);
        }
        document.getElementsByTagName('head')[0].appendChild(styleElement);
    };

//动态添加样式,这里我主要是设置grid列表的行颜色用的

addStyle('.x-grid-record-red table{background: #E6D1E3;}');
addStyle('.x-grid-record-green table{background: #92FCCC;}');

 

以上是全部的代码,如有不明白的,可以留言我们一起讨论,或是有写的不足的还请大家给出意见。

分享到:
评论

相关推荐

    ExtJs动态grid的生成

    我们首先从标题"ExtJs动态grid的生成"开始,了解动态生成Grid的基本概念和实现方法。 动态生成Grid意味着在运行时根据需求创建和更新Grid组件,而不是在应用初始化时静态定义。这种灵活性允许开发者更好地响应数据...

    Folio使用React和CSSGrid布局构建的动态表单

    总的来说,Folio项目展示了React和CSS Grid在构建动态表单方面的强大潜力。React提供了组件化的开发模式和高效的UI更新,而CSS Grid则为表单布局提供了灵活的工具。这样的组合对于现代Web应用开发者来说,无疑是一个...

    Extjs动态GRID

    EXTJS的动态GRID特性极大地提高了开发效率和用户体验,使得开发者可以构建高度定制化和响应式的数据展示应用。在实际项目中,配合EXTJS的其他组件和功能,如Toolbars、Charts、Windows等,可以构建出功能丰富的Web...

    ASP.NET结合EXTJS动态生成Grid列表的例子程序源码

    这个例子程序源码主要展示了如何将两者结合,动态生成Grid列表。 在ASP.NET中,开发者通常使用C#或VB.NET作为后端编程语言,通过ASP.NET MVC或Web Forms模式来处理HTTP请求并返回HTML响应。EXTJS则负责在客户端渲染...

    Grid++Report 扩展 报表控件 可扩展 可动态添加

    1. **动态修改和添加功能**:Grid++Report的独特之处在于其支持报表的动态修改和添加。这意味着开发者可以在程序运行过程中,根据用户需求或业务逻辑,实时调整报表结构,如添加新的数据列、修改字段显示方式、调整...

    手动动态添加 PropertyGrid 的数据行并显示 C# (非属性绑定方式)

    本教程将详细介绍如何在不使用属性绑定的情况下,手动动态地向`PropertyGrid`添加数据行并进行显示。 首先,理解`PropertyGrid`的基本工作原理至关重要。`PropertyGrid`是.NET Framework中的一个控件,它通过反射...

    ng-grid实现动态列表.rar

    本资源"ng-grid实现动态列表.rar"包含ng-Grid动态列的实现,以及所需的库文件和示例效果。 动态列表是Web应用中常见的需求,特别是在数据管理界面,用户可能希望根据不同的场景显示不同的列。ng-Grid允许我们在运行...

    动态设置显示kendoui grid控件某一列的格式

    在IT领域,Kendo UI Grid是一款非常流行的JavaScript数据可视化组件,用于构建强大的、响应式的网格视图。在处理数据展示时,我们常常需要对不同列的数据进行格式化,以满足特定的显示需求。本篇文章将深入探讨如何...

    jquery 可动态增行,动态编辑,删除的grid

    jQuery Grid支持动态增加行,这在处理动态数据或者需要用户添加新记录的场景中非常有用。通过调用Grid的API,可以向表格末尾添加新的行数据。例如,使用`addRowData`函数,传入新的数据对象和行ID,就能实现在表格中...

    Sigma-Grid.zip_grid_grid jquery_html jquery_jquery grid

    Sigma Grid 是构建在jQuery之上的,利用其强大的DOM操作和事件处理能力,为开发者提供了一种快速构建动态表格的方法。 2. **Sigma Grid 功能**: - **数据绑定**:能够绑定到不同的数据源,如JSON、XML或API。 - ...

    利用构建规则格网(grid)进行体积计算.rar_sawdco_凸包点_凸包生成_快速凸包法_格网体积计算

    利用构建规则格网(grid)进行体积计算:1.读取.txt数据文件。 2.正确求出导入数据散点集的凸包点。自定义网格的大小,在网格中绘制出凸包图形,并可保存为.dxf文件。 3.可以实现凸包图片在程序窗口的基本操作。 4....

    grid嵌套grid

    总的来说,`Grid`嵌套`Grid`是`FineUI`框架中的一种强大布局策略,它允许开发者构建出层次分明、易于操作的用户界面。熟练掌握这一技术,将有助于提升前端开发效率和用户体验。在实践中不断探索和优化,你将能够创造...

    extjs动态表格实例(封装GRID,从STRUTS2读取后台数据 )

    在这个"extjs动态表格实例"中,我们将探讨如何使用ExtJS封装Grid并从Struts2框架的后台获取数据。 首先,让我们了解ExtJS中的Grid组件。Grid是ExtJS的一个关键组件,它用于展示结构化数据,并支持多种操作,如排序...

    mfc_grid.zip_excel界面_grid_grid Visual c_mfc excel界面_mfc grid

    综上所述,这个项目旨在通过MFC和C++,利用grid控件创建一个类似于Outlook和Excel的用户界面,开发者可以参考提供的“mfc_grid”资源进行学习和实践,掌握如何在Windows应用中构建功能丰富的数据网格界面。

    girdDiv拖拽gridstack-4.2.5

    为此,GridStack提供了如动态加载、虚拟化等高级特性,以提高用户体验和性能。 总结起来,"girdDiv拖拽gridstack-4.2.5"是一个强大的前端工具,它结合了jQuery和JavaScript的优势,使得开发者能够轻松实现动态、...

    WPF 改变Grid长度演示

    在本文中,我们将深入探讨如何在Windows Presentation Foundation (WPF) 中使用C#语言实现Grid长度的动态改变,以及创建一个动画效果,让Grid能够自动收起。这是一项关键技能,对于开发美观、响应式的WPF用户界面至...

    Ext 根据数据库返回json动态生成grid列表实例

    ExtJS是一款强大的JavaScript库,常用于构建富客户端应用程序,尤其是数据可视化和数据管理组件,如Grid。Grid是ExtJS中的核心组件,它提供了一种有效的方式来展示大量结构化数据。 首先,我们需要理解Grid的基本...

    最新的GT-Grid vs EXT-Grid例子(超级经典)

    此外,GT-Grid还支持动态加载数据,以优化页面性能,特别是处理大数据时。 EXT-Grid则是EXT JS框架的一部分,EXT JS是一个完整的前端开发库,提供了一套完整的UI组件。EXT-Grid拥有丰富的内置特性,如拖放、行级...

    Grid++Report报表代码填充数据

    Grid++Report是一款强大的报表工具,它允许开发者通过代码来动态地填充数据,从而创建出符合业务需求的复杂报表。这个"Grid++Report报表代码填充数据"主题主要涵盖以下几个方面的知识点: 1. **Grid++Report简介**...

    Extjs Grid2Grid拖拽

    Grid可以动态加载数据,支持排序、分页、筛选等多种功能。 2. **DragDrop API**:ExtJS内置了DragDrop API,允许开发者实现元素之间的拖放操作。你需要创建DragSource和DropTarget对象,分别对应拖动的源Grid和接收...

Global site tag (gtag.js) - Google Analytics