`
qinya06
  • 浏览: 600110 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

ext 复杂报表

阅读更多
extjs groupheaderplugin的使用
创建调用的HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http: //www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http: //www.w3.org/1999/xhtml" xml: lang="en" lang="en">
<head>
<link rel="stylesheet" type="text/css" href="../extjs/resources/css/ext-all.css" />
<link rel="stylesheet" type="text/css" href="GroupHeaderPlugin.css" />
<script type="text/javascript" src="../extjs/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="../extjs/ext-all.js"></script>
<script type="text/javascript" src="GroupHeaderPlugin.js"></script>
<script type="text/javascript">
Ext.BLANK_IMAGE_URL = '../extjs/resources/images/default/s.gif';
Ext.onReady(function() {
new Ext.Viewport({
  layout: 'fit',
  items: [{
   xtype: 'grid',
   title: 'GroupHeaderPlugin Example',
   store: new Ext.data.SimpleStore({
    fields: ['id', 'nr1', 'text1', 'info1', 'special1', 'nr2', 'text2', 'info2', 'special2', 'special3', 'changed'],
    data: [
     ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11']
    ]
   }),
   colModel: new Ext.grid.ColumnModel({
    columns: [
     {header: 'Id', width: 25, dataIndex: 'id'},
     {header: 'Nr', width: 25, dataIndex: 'nr1'},
     {header: 'Text', width: 50, dataIndex: 'text1'},
     {header: 'Info', width: 50, dataIndex: 'info1'},
     {header: 'Special', width: 60, dataIndex: 'special1'},
     {header: 'Nr', width: 25, dataIndex: 'nr2'},
     {header: 'Text', width: 50, dataIndex: 'text2'},
     {header: 'Info', width: 50, dataIndex: 'info2'},
     {header: 'Special', width: 60, dataIndex: 'special2'},
     {header: 'Special', width: 60, dataIndex: 'special3'},
     {header: 'Changed', width: 50, dataIndex: 'changed'}
    ],
    defaultSortable: true,
    rows: [
     [
      {rowspan: 2},
      {header: 'Before', colspan: 4, align: 'center'},
      {header: 'After', colspan: 4, align: 'center'},
      {header: 'Sum', colspan: 2, align: 'center', rowspan: 2}
     ], [
      {},
      {header: 'Merchandise', colspan: 3, align: 'center'},
      {},
      {header: 'Merchandise', colspan: 3, align: 'center'}
     ]
    ]
   }),
   enableColumnMove: false,
   viewConfig: {
    forceFit: true
   },
   plugins: [new Ext.ux.plugins.GroupHeaderGrid()]
  }]
});
});
</script>
</head>
<body>
</body>
</html>



GroupHeaderPlugin.js文件源码:

Ext.namespace("Ext.ux.plugins");

Ext.ux.plugins.GroupHeaderGrid = function(config) {
Ext.apply(this, config);
};

Ext.extend(Ext.ux.plugins.GroupHeaderGrid, Ext.util.Observable, {
init: function(grid) {
  var v = grid.getView();
  v.beforeMethod('initTemplates', this.initTemplates);
  v.renderHeaders = this.renderHeaders.createDelegate(v, [v.renderHeaders]);
        v.afterMethod('onColumnWidthUpdated', this.updateGroupStyles);
        v.afterMethod('onAllColumnWidthsUpdated', this.updateGroupStyles);
  v.afterMethod('onColumnHiddenUpdated', this.updateGroupStyles);
  v.getHeaderCell = this.getHeaderCell;
  v.updateSortIcon = this.updateSortIcon;
  v.getGroupStyle = this.getGroupStyle;
},

initTemplates: function() {
  var ts = this.templates || {};
  if (!ts.gheader) {
   ts.gheader = new Ext.Template(
    '<table border="0" cellspacing="0" cellpadding="0" class="ux-grid-group-table" style="{tstyle}">',
    '<thead>{rows}{header}</thead>',
    '</table>'
   );
  }
  if (!ts.header) {
   ts.header = new Ext.Template(
    '<tr class="x-grid3-hd-row">{cells}</tr>'
   );
  }
  if (!ts.gcell) {
   ts.gcell = new Ext.Template(
    '<td class="x-grid3-hd {cls} x-grid3-td-{id}" style="{style}" rowspan="{rowspan}" colspan="{colspan}">',
    '<div {tooltip} class="x-grid3-hd-inner x-grid3-hd-{id}" unselectable="on" style="{istyle}">{value}</div>',
    '</td>'
   );
  }
  this.templates = ts;
},

renderHeaders: function(renderHeaders) {
  var ts = this.templates, rows = [], table = [];
  for (var i = 0; i < this.cm.rows.length; i++) {
   var r = this.cm.rows[i], cells = [], col = 0;
   for (var j = 0; j < r.length; j++) {
    var c = r[j];
    c.colspan = c.colspan || 1;
    c.rowspan = c.rowspan || 1;
    while (table[i] && table[i][col]) {
     col++;
    }
    c.col = col;
    for (var rs = i; rs < i + c.rowspan; rs++) {
     if (!table[rs]) {
      table[rs] = [];
     }
     for (var cs = col; cs < col + c.colspan; cs++) {
      table[rs][cs] = true;
     }
    }
    var gs = this.getGroupStyle(c);
    cells[j] = ts.gcell.apply({
     id: c.id || i + '-' + col,
     cls: c.header ? 'ux-grid-hd-group-cell' : 'ux-grid-hd-nogroup-cell',
     style: 'width:' + gs.width + ';' + (gs.hidden ? 'display:none;' : '') + (c.align ? 'text-align:' + c.align + ';' : ''),
     rowspan: c.rowspan,
     colspan: gs.colspan,
     tooltip: c.tooltip ? (Ext.QuickTips.isEnabled() ? 'ext:qtip' : 'title') + '="' + c.tooltip + '"' : '',
     value: c.header || '&#160;',
     istyle: c.align == 'right' ? 'padding-right:16px' : ''
    });
   }
   rows[i] = ts.header.apply({
    cells: cells.join('')
   });
  }
  return ts.gheader.apply({
   tstyle: 'width:' + this.getTotalWidth() + ';',
   rows: rows.join(''),
   header: renderHeaders.call(this)
  });
},

getGroupStyle: function(c) {
  var w = 0, h = true, cs = 0;
  for (var i = c.col; i < c.col + c.colspan; i++) {
   if (!this.cm.isHidden(i)) {
    var cw = this.cm.getColumnWidth(i);
    if(typeof cw == 'number'){
     w += cw;
    }
    h = false;
    cs++;
   }
  }
  return {
   width: (Ext.isBorderBox ? w : Math.max(w - this.borderWidth, 0)) + 'px',
   hidden: h,
   colspan: cs || 1
  }
},

updateGroupStyles: function(col) {
  var rows = this.mainHd.query('tr.x-grid3-hd-row');
  for (var i = 0; i < rows.length - 1; i++) {
   var cells = rows[i].childNodes;
   for (var j = 0; j < cells.length; j++) {
    var c = this.cm.rows[i][j];
    if ((typeof col != 'number') || (col >= c.col && col < c.col + c.colspan)) {
     var gs = this.getGroupStyle(c);
     cells[j].style.width = gs.width;
     cells[j].style.display = gs.hidden ? 'none' : '';
     cells[j].colSpan = gs.colspan;
    }
   }
  }
},

getHeaderCell : function(index){
  return this.mainHd.query('td.x-grid3-cell')[index];
},

updateSortIcon : function(col, dir){
  var sc = this.sortClasses;
  var hds = this.mainHd.select('td.x-grid3-cell').removeClass(sc);
  hds.item(col).addClass(sc[dir == "DESC" ? 1 : 0]);
}
});



css源码:

.x-grid3-header-offset {
width: auto;
}
.ext-ie .x-grid3 table.ux-grid-group-table, .ext-safari .x-grid3 table.ux-grid-group-table {
table-layout: auto;
}
.ux-grid-hd-group-cell {
background: url(../extjs/resources/images/default/grid/grid3-hrow.gif) repeat-x bottom;
  • 大小: 44.8 KB
分享到:
评论

相关推荐

    ext3.3制作报表新功能,表格实现报表格式

    1. **表头分割**:EXT JS允许开发者将表头进行多级拆分,这样可以更好地组织复杂的数据结构,使用户能快速理解列的含义和层级关系。例如,一级标题可以表示部门,二级标题表示具体的职位,数据行则显示各个职位的...

    Ext图形报表

    在“Ext图形报表”这个主题中,我们将深入探讨如何使用ExtJS创建交互式的图表和报表,这对于数据可视化和业务分析至关重要。 首先,ExtJS提供了Ext.chart.*命名空间,包含了创建各种图表所需的所有类和方法。这些...

    报表打印,用于ext的。很好用

    5. **第三方库集成**:EXT自身可能不提供高级的打印功能,比如多页打印、复杂的页面布局等。这时,我们可能需要集成像JSPDF这样的第三方库来生成高质量的PDF文档,从而实现更精细的打印控制。 6. **跨浏览器兼容性*...

    ext4.0生成图形报表(柱形、折线、饼状)

    在IT行业中,生成图形报表是数据分析和展示的重要环节,它能直观地呈现复杂的数据信息。在本案例中,我们关注的是使用ext4.0框架来创建柱形、折线和饼状图。EXT是一个强大的JavaScript库,专为构建富客户端Web应用...

    ext 多表头和锁定列结合的示例

    在EXT JS这个强大的JavaScript库中,多表头和锁定列的结合使用是创建复杂、功能丰富的数据展示表格的重要手段。EXT JS允许开发者构建高度自定义的用户界面,尤其是在处理大量数据时,锁定列和多表头功能能显著提高...

    EXT酒店管理实例EXT酒店管理实例

    4. **报表和统计**:EXT的图表组件可以用于生成各类报表,如入住率报告、收入分析等,帮助管理层了解酒店的经营状况,做出决策。 5. **权限控制**:EXT支持角色和权限管理,可以根据员工的角色分配不同的操作权限,...

    ext.net后台管理

    在"WebSite2"这个项目中,开发者可能已经使用EXT.NET创建了一个包含多个功能模块的后台管理系统,如用户管理、角色管理、权限分配、数据报表等。通过查看源代码和调试,我们可以深入理解EXT.NET如何被用来构建这样的...

    ext 4.1 多重表头gridheader

    在EXT JS 4.1框架中,GridHeader是用于创建复杂和可定制表格视图的重要组件。这个功能允许开发者在网格中实现多层次的表头,从而更好地组织和展示数据。多重表头通常用于呈现具有多维度信息的数据,例如在财务报表...

    多年积攒下来的EXT3.3例子大放送

    3. **报表**:EXTJS提供了创建复杂报表的功能,如使用`Ext.chart.Chart`组件创建图表,或利用`Ext.grid.feature.Grouping`进行数据分组显示。通过这些工具,开发者能够动态地展示和分析数据,形成可视化报告。 4. *...

    EXT2.0中文教程

    1.2. 看看ext-1.1.1的文档 1.3. 看看ext-2.0的文档 1.4. 为什么有的例子必须放在服务器上才能看到效果? 1.5. 为什么自己按照例子写的代码,显示出来总找不到图片 1.6. 我们还需要什么? 1.7. 入门之前,都看hello...

    Ext amCharts (eamCharts)

    **Ext amCharts (eamCharts)** 是一个专门为报表展示设计的组件,它结合了Ext JS框架与amCharts图表库,提供了一种在Web应用中创建动态、交互式图表的方法。这个封装控件允许开发者轻松地在Ext JS应用中集成amCharts...

    Ext 开发指南 学习资料

    2.10.2. 分组表格,嘻嘻,这是交叉报表吗? 2.11. 午夜怪谈,论可以改变大小,可以拖拽的表格 2.11.1. 先看看怎么拖拽改变表格的大小 2.11.2. 再看怎么在表格里拖动行 2.11.2.1. 无用功 之 同一个表格里拖拽 2.11....

    仿EXT风格JS.rar

    - **报表查看**:利用EXT的图表组件,可以实时展示业务数据报表,帮助决策者了解业务状况。 总的来说,“仿EXT风格JS.rar”提供的资源对于希望构建高效、美观的网站后台管理系统的开发者来说,是一个宝贵的工具集...

    一个EXT+js实现的Grid表格合并的例子源码

    EXT的核心在于其组件模型,它允许开发者通过组合各种组件来构建复杂的用户界面。 在EXT中,Grid表格是一种常见的数据展示方式,它允许用户以行列的形式查看和操作大量数据。EXT Grid提供了很多高级特性,如分页、...

    ext-2.2.rar

    - **企业级应用**:EXT 2.2因其强大的功能和稳定的性能,常被用于构建复杂的企业级Web应用,如数据可视化、工作流系统、报表工具等。 - **数据密集型应用**:其强大的表格组件和数据网格,适合展示大量数据并进行...

    ext可编辑表格

    EXT可编辑表格结合了EXTJS的灵活性和强大功能,提供了直观、交互式的数据编辑体验,常用于需要用户在表格中直接修改数据的应用场景,如数据录入、管理或报表编辑等。开发者可以根据需求定制编辑器类型,以及添加各种...

    最新Java后台管理系统(ext-js4、 Hibernate 4、 Spring mvc3)

    1. **Ext-JS4**:这是一个强大的JavaScript库,主要用于构建复杂的Web应用程序的用户界面。它提供了丰富的组件库,包括表格、树形视图、图表等,使开发者能够快速创建出美观且交互性强的前端页面。在Java后台管理...

    Ext+Struts2的学生成绩管理系统

    这通常涉及到复杂的计算逻辑,可能需要用到Struts2的拦截器来处理,而数据显示则可能利用Ext的图表组件。 5. **权限管理**:根据角色(如教师、管理员)设定不同的操作权限。Struts2的拦截器机制可以实现这一点,...

    Ext扩展控件-----可以在代码中动态为表格增加一列或者删除一列

    这在需要根据业务需求或者用户交互动态改变列结构的场景下非常有用,例如在数据分析、报表生成或者配置式界面设计中。 要使用这个插件,首先你需要在Grid的配置中引入它。这通常涉及到创建一个Grid实例,并在`...

Global site tag (gtag.js) - Google Analytics