从Grid 导出Excel2

<%@ include file="/html/wsportlet/assetmanage/init.jsp"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="/html/wsportlet/common/selectexportcolumn.jspf"%>

<portlet:renderURL windowState="<%=WindowState.MAXIMIZED.toString()%>"
var="createURL">
<portlet:param name="struts_action"
value="/machineryroom/addmachineryroom" />
<portlet:param name="redirect" value="<%=HtmlUtil.escape(currentURL)%>" />
</portlet:renderURL>

<portlet:renderURL windowState="<%=WindowState.MAXIMIZED.toString()%>"
var="updateURL">
<portlet:param name="struts_action"
value="/machineryroom/updatemachineryroom" />
<portlet:param name="redirect" value="<%=HtmlUtil.escape(currentURL)%>" />
</portlet:renderURL>

<portlet:renderURL windowState="<%=WindowState.MAXIMIZED.toString()%>"
var="viewURL">
<portlet:param name="struts_action"
value="/machineryroom/viewmachineryroom" />
<portlet:param name="redirect" value="<%=HtmlUtil.escape(currentURL)%>" />
</portlet:renderURL>

<div>
<form id="queryform" method="post" class="inputform">
<fieldset>
<legend>
<liferay-ui:message key="frame.query.condition" />
</legend>
<dl>
<div>
<dt>
<label>
机房名称
</label>
</dt>
<dd>
<input type="text" name="f_am.name" value=""
οnkeypress="machineryroomgrid.doEnterQuery();" />
</dd>
</div>
<div class="right">
<dt>
节点
</dt>
<dd>
<cdn:optionaltag name="f_am.nodeid" datasource="request"
labelColumn="name" datalist="nodeLs" valueColumn="id"
blankline="true" onchange ="machineryroomgrid.doQuery();" />
</dd>
</div>
</dl>
<dl>
<div>
<dt>
启用状态
</dt>
<dd>
<cdn:optionaltag name="f_am.active"
datalist="<%=ParamKeys.ACTIVE%>" datasource="cache"
dbTable="ws_param" labelColumn="displayvalue"
valueColumn="paramvalue" blankline="true" readonly="true"
οnchange="machineryroomgrid.doQuery();" />

</dd>
</div>

</dl>
</fieldset>

</form>

<div class="btnframe">
<span class="btn search first" οnclick="machineryroomgrid.doQuery();">
查询 </span>

<span class="btn add" οnclick="createMachineryroom();"> 新增机房 </span>
<span class="btn modify" οnclick="updateMachineryroom();"> 修改机房
</span>
<span class="btn delete" οnclick="deleteMachineryroom();"> 删除机房
</span>

</div>

<div id="initMachineryroomGridBox" height="350px" class="gridbox"></div>

</div>

<script>

var pageConstants = new Object();

//新建机房信息
function createMachineryroom(){
var data = {"machineryroomVO.machineryroomid":-1};
postForm('<%=createURL%>', data);
};

//查看机房
function viewMachineryroom(id){
var selectedIds = "";
if(id){
selectedIds = id;
}
else {
var gridObj = machineryroomgrid;
selectedIds = GridUtil.getSelectedIds(gridObj, false);
if(selectedIds == false){
return false;
}
}
var data = {"machineryroomid":selectedIds};
postForm('<%=viewURL%>', data);
};


function doQuery(){
machineryroomgrid.doQuery();
}

//修改机房信息
function updateMachineryroom(){
var gridObj = machineryroomgrid;
var selectedIds = GridUtil.getSelectedIds(gridObj, false);
if(selectedIds == false){
return false;
}
var data = {"machineryroomid":selectedIds};
postForm('<%=updateURL%>', data);
};

//删除机房
function deleteMachineryroom(){
var gridObj = machineryroomgrid;
var selectedIds = GridUtil.getSelectedIds(gridObj, true);
if(selectedIds == false){
return false;
}
if(window.confirm("<liferay-ui:message key="frame.confirm.delete" />")){
var targetUrl = '/c/machineryroom/deletemachineryroom?machineryroomid='+selectedIds;
AjaxUtil.doPost(targetUrl, null, callback);
}
};

function callback(text){
var jsonmsg = eval(text);
alert(jsonmsg.msg)
if(jsonmsg.success){
machineryroomgrid.refresh();
}
}
var data =[
["机房ID" ,"id" ,false ,10 ,'ro' , '#FFFFFF', 'center', 'str'],
["节点" ,"nodeid" ,true ,0 ,'sro' , '#FFFFFF', 'center', 'str'],
["节点名称" ,"nodename" ,false ,10 ,'ro' , '#FFFFFF', 'center', 'str'],
["机房名称" ,"name" ,false ,10 ,'ro' , '#FFFFFF', 'center', 'str'],
["基准机房" ,"baseroomname" ,false ,10 ,'ro' , '#FFFFFF', 'center', 'str'],
["所属销区" ,"saleareaname" ,false ,18 ,'ro' , '#FFFFFF', 'center', 'str'],
["运营商" ,"yys" ,false ,10 ,'sro' , '#FFFFFF', 'center', 'str'],
["采购单位" ,"purchase_org" ,false ,10 ,'ro' , '#FFFFFF', 'center', 'str'],
["管理单位" ,"manage_org" ,false ,10 ,'ro' , '#FFFFFF', 'center', 'str'],
["启用状态" ,"active" ,false ,10 , 'sro', '#FFFFFF', 'center', 'str']
];
var exportURL = '/c/machineryroom/doExport';
var cols=new GridUtil.colFactory(data);
function initMachineryroomGrid(){
var pc = cols.getColIndex();
machineryroomgrid = new dhtmlXGridObject('initMachineryroomGridBox');
cols.setGridColumns(machineryroomgrid);
machineryroomgrid.setImagePath('/html/js/dhtmlxgrid/imgs/');
machineryroomgrid.enablePaging();
machineryroomgrid.setQueryForm("queryform");
machineryroomgrid.setEditable(false);
machineryroomgrid.enableMultiselect(true);
machineryroomgrid.enableAutoHeight(true,"350px",false);
machineryroomgrid.setExtLinkUrl(0, "javascript://viewMachineryroom();","_self");
<c:forEach var="act" items="${nodeLs}" varStatus="i">
machineryroomgrid.getCombo(pc.nodeid).put("<c:out value='${act.id}'/>","<c:out value='${act.name}'/>");
</c:forEach>
<c:forEach var="act" items="${activeLs}" varStatus="i">
machineryroomgrid.getCombo(pc.active).put("<c:out value='${act.paramvalue}'/>","<c:out value='${act.displayvalue}'/>");
</c:forEach>
<c:forEach var="carrycompany" items="${carrycompanyLs}" varStatus="i">
machineryroomgrid.getCombo(pc.yys).put("<c:out value='${carrycompany.paramvalue}'/>","<c:out value='${carrycompany.displayvalue}'/>");
</c:forEach>

machineryroomgrid.init();
machineryroomgrid.doQuery('/c/machineryroom/initmachineryroom');
};
pageConstants.custitem = cols.getColIndex();
jQuery(document).ready(initMachineryroomGrid);
function gridReset(){
machineryroomgrid.refresh();
}


</script>
Kendo UI框架提供了强大的Excel导出功能,通过Grid的saveAsExcel能方便地导出Grid中的数据,而且格式美观大方,使用起来也非常方便。但是在实际使用中不是很理想,主要有以下两个问题: 1. 导出的列数据是原始值 Kendo UI默认导出的是该列的value值,及查出来的值,有时候我们会用template渲染一下导出的列,比如将“Y”显示成“是”,把“N”显示成“否”。而Kendo UI导出的却是Y/N这种只有程序员看得懂的数据库标识,显然不是我们需要的,这种情况非常常见。 2. 不能灵活控制可导出的列 Kendo UI的Excel导出主要看两点,一是该列(column)是field字段,而不是自定义的name;二是该列不是隐藏的(hidden:true)。这样我们无法灵活导出我们需要的列。 为了解决上面两个问题,我查看了Kendo UI的源代码,提取并改进了源代码。主要更改点及使用方法请看下面源代码。主要针对以上两点做了更改,只需要在grid定义columns时加上isExport或exportTemplate即可: 在导出数据,先看该列有没有自定义exportTemplate(),没有则看Kendo UI自带的template(),再没有才会导出查出来的值。 判断是否导出该列不再看hidden属性,而是看列的isExport属性,如果为false则不导出,其它情况一律导出该列。 经过这两个更改,基本可以应对所有业务场景,可以方便快捷地开发了! 但要注意,Kendo UI自带的导出功能无法应用于导出大量数据,似乎是浏览器的jvm溢出了,建议超过5万条的数据导出还是老老实实写后台导出功能吧。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值