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

Ext Grid实现动态表头完整版

阅读更多

  根据项目需要实现动态表头效果,查询了网站的资料,发现写的都不是很详细,也有些不能实现,听网上说可以用Ext.ux.grid.DynamicGridPanel来实现动态表头,可是放在我的项目里面怎么也无法实现,不知道是我人笨,还是这个插件本身就存在问题,没办法,既然插件无法实现,那就只好自己开发咯,静下新来想想,无非就是grid的ColumnModel和store的feilds变换而已,只要动态去后台取,那实现起来应该是没问题,想到这里,立即开发,没法到还真让我实现,呵呵,现在贴出来与各位分享分享,顺便留着记录,代码如下:

实现步骤如下:

1.创建动态表头store需要的field数组需要的java类

public class DynamicFieldsDTO {
  public String name;
  public String type;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public String getType() {
  return type;
 }
 public void setType(String type) {
  this.type = type;
 }
}

2.创建动态表头ColumnModel需要的columns需要的java类

public class DynamicColumnsDTO {
    public String header;
    public String dataIndex;
    public boolean show;
    public boolean sortable;
    public int width;
   
  public String getHeader() {
   return header;
  }
  public void setHeader(String header) {
   this.header = header;
  }
  public String getDataIndex() {
   return dataIndex;
  }
  public void setDataIndex(String dataIndex) {
   this.dataIndex = dataIndex;
  }
  
  public boolean isShow() {
   return show;
  }
  public void setShow(boolean show) {
   this.show = show;
  }
  public boolean isSortable() {
   return sortable;
  }
  public void setSortable(boolean sortable) {
   this.sortable = sortable;
  }
  public int getWidth() {
   return width;
  }
  public void setWidth(int width) {
   this.width = width;
  }
}

3.创建GetColumnAction类

public class GetColumnAction extends AjaxAction {

 protected Object actionExecute(ActionMapping actionMapping,
   ActionForm actionForm, HttpServletRequest request,
   HttpServletResponse response) throws Exception {


   List achievemens = achievementService.findAllDefined();   //从数据库获取grid显示字段
  
  /***************转换Ext动态表头处理************************/
  List list=new ArrayList();
  List fieldsList=new ArrayList();
  List columnsList=new ArrayList();  
   for (int i = 0; i <achievemens.size(); i++) {
   TkBmAchievementDefine tkBmAchievement =(TkBmAchievementDefine)achievemens.get(i); 
   DynamicFieldsDTO fieldsDto=new DynamicFieldsDTO();
   fieldsDto.setName(tkBmAchievement.getColumns());
   fieldsDto.setType("string");
   fieldsList.add(fieldsDto);
   
   DynamicColumnsDTO columnsDto=new DynamicColumnsDTO();  
   if(tkBmAchievement.getColumns().equals("id")){
         //隐藏某列
   }else{
    columnsDto.setHeader(tkBmAchievement.getName());
    columnsDto.setDataIndex(tkBmAchievement.getColumns());
    columnsDto.setShow(true);
    columnsDto.setSortable(true);
    columnsDto.setWidth(100);
    columnsList.add(columnsDto);
   }
  } 
   
    JSONArray  columnjsonArray =toJson(columnsList);
   JSONArray  fieldsjsonArray =toJson(fieldsList);      //转换成JSON对象
   response.getWriter().write("{columns:"+columnjsonArray+",fields:"+fieldsjsonArray+"}");
   return null;
 }
}

 

4.客户端处理代码如下:

  Ext.onReady(function() {
   Ext.Ajax.request({                            
           url:'getColumn.do',  
           failure:function(){  
               Ext.Msg.alert('信息提示','数据加载异常....');  
           },
     success:function(response){  
      if(response.responseText != null && response.responseText.length != 0){
      var responseArray = Ext.util.JSON.decode(response.responseText);


       var store=new Ext.data.Store({  
           proxy: new Ext.data.HttpProxy({
                      url: 'searchTkBmAchievementImport.do'
     }),
             reader: new Ext.data.JsonReader({  
                root:'list',  
                totalProperty:'Total',  
                remoteSort:false,  
                fields:responseArray.fields 
             })
         });    
       
       var bbt = new Ext.PagingToolbar({
            pageSize:25,
            store: store,
            cls : 'o-toolbar',
            displayInfo: true,
            displayMsg: '当前显示 {0} - {1} 条/ 共 {2} 条',
            emptyMsg: "没有记录"
        }
      ); 
      
         
            var sm=new Ext.grid.CheckboxSelectionModel(); 
             var columntype =new Array() ;
             columntype.push(sm); 
             Ext.each(responseArray.columns,function(h){
               columntype.push({  
                sortable:h.sortable,
                width:h.width,
                 header:h.header,   
                dataIndex:h.dataIndex
             });  
             });  
           
      var cm=new Ext.grid.ColumnModel(columntype);
      var  grid = new Ext.grid.GridPanel({
          stripeRows : true,
          id:'gridId',
          store: store,
          cm: cm,
          sm: sm,
          columnLines: true,
          trackMouseOver:false,
          loadMask: true,
          viewConfig: {
              showPreview:false,
              getRowClass : function(record, rowIndex, p, store){
                  if(this.showPreview){
                      p.body = '<p>'+record.data.excerpt+'</p>';
                      return 'x-grid3-row-expanded';
                  }
                  return 'x-grid3-row-collapsed';
              }
          },
           bbar: bbt,
          width:840,
          height:340,
          autoExplandColumn:1,
          animCollapse: false,
          iconCls: 'icon-grid',
          title: '业绩维护',
          el: 'dynamic'
          }); 


           grid.render();
           store.load({params:{start:0, limit:25}});
           grid.getSelectionModel().selectFirstRow();
          }
         }
         });
  
});

5.创建jsp页面调用js,此处简单不再描述

 

分享到:
评论

相关推荐

    Ext grid合并表头

    总的来说,`Ext grid`的合并表头功能是通过`GroupHeaderPlugin`实现的,这个插件结合了`JavaScript`和`CSS`来创建多级、可定制的表头结构。通过熟练掌握这一特性,开发者能够为用户提供更直观、更易理解的数据展示,...

    EXT grid 表头 三层 插件

    表头的三层插件则是EXT Grid的一种扩展功能,它允许用户在表头部分实现更为复杂和多层次的布局,以更好地管理和组织数据列。这种插件通常用于展现层级关系的数据,比如分类、分组或树状结构的信息。 EXT Grid的表头...

    extjs 实现动态表头

    标题“extjs 实现动态表头”表明我们要讨论的是如何在ExtJS环境中构建一个能够动态改变列头的表格。动态表头的核心在于理解ExtJS的GridPanel组件和ColumnModel类。GridPanel用于显示数据,而ColumnModel则定义了...

    Ext grid 动态添加字段、列扩展

    Ext grid 动态添加字段、列扩展, 如何动态添加或者删除一个grid的列

    Ext表格列锁定+多表头插件

    在本文中,我们将深入探讨"Ext表格列锁定+多表头插件"这一主题,它在Ext3.4版本中的实现及其相关技术。这个插件主要用于改进Ext Grid的用户体验,特别是处理大量数据时,通过列锁定和多表头功能,使得用户能够更有效...

    EXT 复杂表头插件

    在EXT Grid中,表头(Header)是显示列标题的部分,而“复杂表头”则是指具有多层次、多维度展示数据的表头,可以更直观地组织和显示复杂的数据关系。 "EXT 复杂表头插件"是为了扩展EXT Grid的功能,使其能够支持...

    Ext3.4.0复杂(多行)表头+锁定多列例子

    "Ext3.4.0复杂(多行)表头+锁定多列例子"这个标题涉及到的是一个JavaScript库——Ext JS的一个高级功能应用。Ext JS是一个流行的前端框架,用于构建富互联网应用程序(RIA),它提供了一套完整的组件化开发工具,包括...

    Ext grid中渲染进度条,超帅 源码-----下载不扣分,回帖加1分,欢迎下载,童叟无欺。

    Ext grid中渲染进度条,超帅 源码-----下载不扣分,回帖加1分,欢迎下载,童叟无欺。Ext grid中渲染进度条,超帅 源码-----下载不扣分,回帖加1分,欢迎下载,童叟无欺。Ext grid中渲染进度条,超帅 源码-----下载不扣分...

    Ext grid合并单元格

    根据提供的文件信息,我们可以深入探讨如何在 Ext JS 中实现 Grid 的单元格合并功能。此案例主要涉及到了自定义 GridView 的 `renderHeaders` 方法来达到单元格合并的目的,并且还涉及了模板(Template)的使用、...

    EXT4.3实现动态表单全动态

    在本文中,我们将深入探讨EXT4.3如何实现动态表单以及与之相关的动态grid功能。 1. **EXT4.3动态表单**: - **组件化设计**:EXT4.3中的表单基于组件模型,可以方便地创建、添加、删除和修改表单字段。通过`Ext....

    EXT复杂表头+锁定列例子

    EXT Grid的复杂表头可以通过使用嵌套的`Ext.grid.header.Container`来实现。每个Container可以包含一个或多个列(`Ext.grid.Column`),并且可以有自身的标题和子标题。这样,我们可以创建出层次化的列标题,以反映...

    Ext Grid 导出Excel

    这篇博客"Ext Grid 导出Excel"可能详细介绍了如何实现这一功能。 首先,让我们理解Ext Grid的基本工作原理。Ext Grid是Sencha Ext JS框架的一部分,它允许开发者创建可配置的表格视图,可以显示从服务器获取的数据...

    ext grid 合并行

    EXT Grid没有直接提供行头合并,但可以通过创建自定义的表头组件来实现,同样使用`colspan`属性来合并。 7. **监听Store事件**:当数据源发生变化时,如添加、删除或更新记录,可能需要重新计算合并范围并更新渲染...

    Ext Grid表格的自动宽度及高度的实现

    在探讨“Ext Grid表格的自动宽度及高度的实现”这一主题时,我们深入解析如何在Ext JS框架下,利用其强大的Grid组件自适应容器尺寸,实现表格宽度与高度的自动调整。这一技术对于构建响应式、用户友好的界面至关重要...

    extjs grid 多表头插件

    多表头插件是ExtJS Grid的一个重要特性,它允许我们创建具有多层次、复杂结构的表头,以便更好地组织和呈现数据。在ExtJS Grid中,多表头能够帮助用户更清晰地理解列的分组和关系,提高数据的可读性和分析性。 首先...

    ext grid 动态扩展

    本篇将详细介绍如何实现 `Ext Grid` 的列动态添加。 1. **创建 ColumnModel** `Ext.grid.ColumnModel` 是用于定义 `GridPanel` 列结构的类。在创建 `ColumnModel` 时,我们需要提供一个包含列信息的 JavaScript ...

    ext grid 导出 excel

    但是,这需要更复杂的处理,因为Excel的样式系统与EXT Grid的样式不完全相同。 6. **性能优化**:对于大数据量的EXT Grid,直接导出可能导致浏览器卡顿。为了避免这种情况,可以考虑分批导出,或者使用服务器端导出...

    一个很好的EXTGRID实例

    这些文件可以帮助我们理解EXTGRID的实现细节和数据结构。 综上所述,EXTGRID实例展示了如何利用EXT JS库创建一个功能强大且用户友好的数据管理界面,通过深入研究这个实例,开发者可以学习到EXT GRID的各种特性和...

    JSP中使用EXT实现grid table

    总的来说,EXT Grid是JSP开发中实现Ajax数据表格的强大工具,它提供了一系列高级特性和灵活的配置选项,使开发者能够快速构建高效且用户友好的数据展示界面。通过熟练掌握EXT Grid的使用,你可以提高Web应用的交互性...

    ext grid json分页显示

    总结来说,"ext grid json分页显示"是通过EXT.js的Grid组件结合DWR的Ajax能力,实现前端数据的分页加载和显示。这种方式既提高了用户界面的响应速度,又有效管理了大数据量的显示,是现代Web应用中常用的数据展示...

Global site tag (gtag.js) - Google Analytics