大家好,我想实现一个打印grid数据的功能,通过工具中的按钮触发打印函数。现在的问题是,我是通过grid的id来获取grid组件,然后打印,这样不利于代码共用。我现在想怎样在grid里面把这个grid的引用传给这个printGrid函数,不知道该怎么传递grid这个参数,然后这样调用printGrid(grid)[size=medium][/size]
Java代码
var stat1_grid = new Ext.grid.GridPanel({
cm : cm,
store : store,
id:'stat1_grid',
border : false,
loadMask : {
msg : '正在加载数据,请稍后...'
},
bbar : [{
xtype : 'button',
iconCls : 'pdf-icon',
text : '导出'
}, '-', {
xtype : 'button',
iconCls : 'print-icon',
text : '打印',
handler:printGrid
}]
});
var stat1_grid = new Ext.grid.GridPanel({
cm : cm,
store : store,
id:'stat1_grid',
border : false,
loadMask : {
msg : '正在加载数据,请稍后...'
},
bbar : [{
xtype : 'button',
iconCls : 'pdf-icon',
text : '导出'
}, '-', {
xtype : 'button',
iconCls : 'print-icon',
text : '打印',
handler:printGrid
}]
});
这是printGrid函数
Java代码
//打印报表
function printGrid() {
var grid =Ext.getCmp('stat1_grid');
var tableStr = '<table width="100%" border=1>';
var cm = grid.getColumnModel();
var colCount = cm.getColumnCount();
var temp_obj = new Array();
// 只下载没有隐藏的列(isHidden()为true表示隐藏,其他都为显示)
// 临时数组,存放所有当前显示列的下标
for (var i = 1; i < colCount; i++) {//从第三列开始,因为我的第1、2列是分别是rownumber和selectmodel。
if (cm.isHidden(i) == true) {
} else {
temp_obj.push(i);
}
}
// tableStr = tableStr + '<tr><td>序号</td>';
for (var i = 0; i < temp_obj.length; i++) {
// 显示列的列标题
tableStr = tableStr + '<td>' + cm.getColumnHeader(temp_obj[i])
+ '</td>';
}
tableStr = tableStr + '</tr>';
var store = grid.getStore();
var recordCount = store.getCount();
for (var i = 0; i < recordCount; i++) {
var r = store.getAt(i);
// tableStr = tableStr + '<tr><td>' + (i + 1) + '</td>';
for (var j = 0; j < temp_obj.length; j++) {
var dataIndex = cm.getDataIndex(temp_obj[j]);
var tdValue = r.get(dataIndex);
var rendererFunc = cm.getRenderer(temp_obj[j]);
if (rendererFunc != null) {
tdValue = rendererFunc(tdValue);
}
if (tdValue == null) {
tdValue = '';
}
tableStr = tableStr + '<td>' + tdValue + '</td>';
}
tableStr = tableStr + '</tr>';
}
tableStr = tableStr + '</table>';
var titleHTML = tableStr;// document.getElementById("printGridfff").innerHTML;
var newwin = window.open('printer.jsp', '', '');
newwin.document.write(titleHTML);
newwin.document.location.reload();
newwin.print();
newwin.close();
}
//打印报表
function printGrid() {
var grid =Ext.getCmp('stat1_grid');
var tableStr = '<table width="100%" border=1>';
var cm = grid.getColumnModel();
var colCount = cm.getColumnCount();
var temp_obj = new Array();
// 只下载没有隐藏的列(isHidden()为true表示隐藏,其他都为显示)
// 临时数组,存放所有当前显示列的下标
for (var i = 1; i < colCount; i++) {//从第三列开始,因为我的第1、2列是分别是rownumber和selectmodel。
if (cm.isHidden(i) == true) {
} else {
temp_obj.push(i);
}
}
// tableStr = tableStr + '<tr><td>序号</td>';
for (var i = 0; i < temp_obj.length; i++) {
// 显示列的列标题
tableStr = tableStr + '<td>' + cm.getColumnHeader(temp_obj[i])
+ '</td>';
}
tableStr = tableStr + '</tr>';
var store = grid.getStore();
var recordCount = store.getCount();
for (var i = 0; i < recordCount; i++) {
var r = store.getAt(i);
// tableStr = tableStr + '<tr><td>' + (i + 1) + '</td>';
for (var j = 0; j < temp_obj.length; j++) {
var dataIndex = cm.getDataIndex(temp_obj[j]);
var tdValue = r.get(dataIndex);
var rendererFunc = cm.getRenderer(temp_obj[j]);
if (rendererFunc != null) {
tdValue = rendererFunc(tdValue);
}
if (tdValue == null) {
tdValue = '';
}
tableStr = tableStr + '<td>' + tdValue + '</td>';
}
tableStr = tableStr + '</tr>';
}
tableStr = tableStr + '</table>';
var titleHTML = tableStr;// document.getElementById("printGridfff").innerHTML;
var newwin = window.open('printer.jsp', '', '');
newwin.document.write(titleHTML);
newwin.document.location.reload();
newwin.print();
newwin.close();
}
采纳的答案
2010-07-30 sl166543210 (中级程序员)
根据你上面写的代码,在button的handler里是可以直接获取到该grid的,那么你的代码可以稍微修改下,即:
{
xtype : 'button',
iconCls : 'print-icon',
text : '打印',
handler:function(){
printGrid(stat1_grid);
}
}
--------------------------------------------------------------------------------
提问者对于答案的评价:
非常感谢给我帮助的朋友
问题答案可能在这里 → 寻找更多解答
JSP+Ext实现CURD, 更简洁明了
Ext 实现 更新列标题和数据,同时满足分组等现实问题
TreeTable的简单实现
关于asp中通过button提交表单的一个简单的问题
table宽度定位问题??
模态页面传值 不知道哪错了 帮我看下
其他回答
给出两种实现方法作参考
1. 利用匿名函数形成闭包封装一下
Js代码
var stat1_grid = new Ext.grid.GridPanel({
// ...
}, '-', {
xtype : 'button',
iconCls : 'print-icon',
text : '打印',
handler:function(){
printGrid(stat1_grid);
}
}]
});
var stat1_grid = new Ext.grid.GridPanel({
// ...
}, '-', {
xtype : 'button',
iconCls : 'print-icon',
text : '打印',
handler:function(){
printGrid(stat1_grid);
}
}]
});
2. 通过ownerCt访问
Js代码
function printGrid(btn, e) { // Button的handler调用时会传递button引用及浏览器事件
// 这里的this默认也是指向button
//var grid = btn.ownerCt.ownerCt;
var grid = this.ownerCt.ownerCt; // button.ownerCt指向toolbar,toolbar.ownerCt指向panel/grid
// ...
}
分享到:
相关推荐
ExtJS GridPanel 单元格无法复制问题解决方案 ExtJS 是一个功能强大的 JavaScript 框架,广泛应用于 Web 开发中。但是,在使用 ExtJS 的 GridPanel 组件时,可能会遇到单元格无法选中复制的问题,特别是在 IE ...
因为浏览器在打印时通常会忽略网页样式,所以需要专门的打印样式来确保Grid在打印时保持良好的格式。 4. **文档**:可能包含.md或.html文件,这些文件提供了关于如何配置和使用打印插件的详细说明,包括如何引入...
extjs 打印局部层,打印弹出window,grid,panel等!
5. **CSS样式调整**:由于打印是从网页生成,所以可能需要针对打印媒介调整CSS样式,以适应纸张的布局和阅读习惯。例如,可能会禁用背景色,调整字体大小,确保在打印时不丢失任何重要信息。 6. **跨浏览器兼容性**...
### ExtJS 打印功能详解 #### 一、概述 ExtJS 是一款强大的 JavaScript 框架,用于构建复杂的前端应用程序。它提供了丰富的组件库,包括数据网格(grid)、窗体(form)等,并且支持高级功能如拖放、动态加载等。在...
8. **验证**:设计的流程图可能需要遵循特定的规则,如不能形成循环。ExtJS的事件和数据验证机制可以用于实现这些逻辑。 9. **集成与部署**:设计完成后,工作流需要与后端系统集成,执行实际的业务逻辑。这通常...
在EXTJS 3.4版本的应用中,集成第三方打印插件Lodop可以实现便捷的Web打印功能。Lodop是一款高效、易用的网页打印控件,它提供了丰富的打印选项和灵活的操作方式,适用于各种复杂的打印需求。本文将详细介绍如何在...
ExtJS3 升级到 ExtJS4 需要修改大量代码,主要是因为 ExtJS4 配备了一类新的系统,不向后兼容。在 ExtJS 3 里生成表的几个框架组件,ExtJS4 大多生成 div,这使得 CSS classes 将会失败。ExtJS4 已完全重新写 grid ...
就是extjs4里面,想给grid里面一格中,文字后面加个小图标。 ...因为俺们项目就只是文字+图标,所以俺就没有复写Actioncolumn,而是从Column下面继承了一下。。 包含自定义插件源码、效果图等等。
ExtJS是一种广泛使用的JavaScript库,专门用于构建富客户端Web应用程序。...通过学习和使用这两个版本,可以深入理解ExtJS的设计理念,提高JavaScript编程技能,并能更好地应对各种Web应用开发挑战。
ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门 ExtJS快速入门ExtJS快速入门 ExtJS快速入门 ExtJS...
适合ExtJs开发人员extjs技术上手以及深入
本书作为Extjs的中文教程,旨在帮助读者快速上手Extjs,其内容涉及Extjs的基础知识和实际应用。 #### 2. JavaScript基础知识 - **类的定义**: Extjs中的类继承于JavaScript原生类,通过Ext.extend来定义。这是...
一个extjs的OA项目 extjs-OA extjs-oaextjs-OA extjs-oa
extjsapi,extjs文档,api手岫
extjs 源码,有兴趣的可以学习下
Extjs4.2 时间下拉框的 年和月是不可以选择的, 本插件可完美修复, 且在4.2.3上面测试的, 花了几天修复的所以分数高点;
extjs4.0结合My97DatePicker4.7版本使用 使用简单 方便 解决extjs中日期控件不能显示时间的问题 下载后将其放到extjs目录的examples下 直接运行date.html即可 extjs4.0版本 4.0以前的版本没有测试过 如果有4.0版本...
JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS 希望对大家有帮助。