wbr2005
wbr2005
2010-07-29 23:26
浏览 246

ext 打印

[color=red]大家好,我想实现一个打印grid数据的功能,通过工具中的按钮触发打印函数。现在的问题是,我是通过grid的id来获取grid组件,然后打印,这样不利于代码共用。我现在想怎样在grid里面把这个grid的引用传给这个printGrid函数,不知道该怎么传递grid这个参数,然后这样调用printGrid(grid)[/color][size=medium][/size]
[code="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
}]
});
[/code]
[size=medium]
[color=red]这是printGrid函数[/color][/size]

[code="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 + '

序号';

for (var i = 0; i < temp_obj.length; i++) {

// 显示列的列标题

tableStr = tableStr + '' + cm.getColumnHeader(temp_obj[i])

+ '';

}

tableStr = tableStr + '';

var store = grid.getStore();

var recordCount = store.getCount();

for (var i = 0; i < recordCount; i++) {

var r = store.getAt(i);

// tableStr = tableStr + '' + (i + 1) + '';

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 + '' + tdValue + '';

}

tableStr = tableStr + '';

}

tableStr = tableStr + '';

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();  
   }  

[/code]

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • sl166543210
    sl166543210 2010-07-30 08:57
    已采纳

    根据你上面写的代码,在button的handler里是可以直接获取到该grid的,那么你的代码可以稍微修改下,即:
    {

    xtype : 'button',

    iconCls : 'print-icon',

    text : '打印',

    handler:function(){
    printGrid(stat1_grid);
    }
    }

    点赞 评论
  • cyrilluce
    cyrilluce 2010-07-30 08:59

    给出两种实现方法作参考
    1. 利用匿名函数形成闭包封装一下
    [code="js"]
    var stat1_grid = new Ext.grid.GridPanel({
    // ...
    }, '-', {
    xtype : 'button',
    iconCls : 'print-icon',
    text : '打印',
    handler:function(){
    printGrid(stat1_grid);
    }
    }]
    });
    [/code]

    1. 通过ownerCt访问 [code="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 // ... } [/code]
    点赞 评论

相关推荐