起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2448|回复: 11

[结贴] grid删除列后报错

[复制链接]

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
发表于 2015-7-10 11:51:49 | 显示全部楼层 |阅读模式
用js控制grid动态加载数据,涉及到先删除列(deleteColumn),再新增列(insertColumn),然后刷新数据,第一遍是没问题的,但是第二遍在刷新数据时报错。报错如下:
2015-07-10 11:50:23 excute Action error:<?xml version="1.0" encoding="UTF-8"?>
<action direct-execute="true" process="/landspvs/LandStatus/LandStatusAnly/process/LandStatusAnly/landStatusAnlyProcess" activity="mainActivity" action-flag="__action_0__" executor="" execute-context="" name="queryJH_LNDSTATMAction"><parameters xmlns:xbiz="http://www.justep.com/xbiz#"><parameter name="offset"><xbiz:simple type="http://www.w3.org/2001/XMLSchema#Integer">0</xbiz:simple></parameter><parameter name="limit"><xbiz:simple type="http://www.w3.org/2001/XMLSchema#Integer">20</xbiz:simple></parameter><parameter name="columns"><xbiz:simple type="http://www.w3.org/2001/XMLSchema#String"><![CDATA[FYEAR,FADMINAREA,FBUILDLANDSUM,FFARMLANDSUM,FWASTELANDSUM,fFADMINAREACODE,JH_LNDSTATM]]></xbiz:simple></parameter><parameter name="variables"><xbiz:map><item key="Modal"><xbiz:simple type="http://www.w3.org/2001/XMLSchema#String"><![CDATA[/landspvs/common/data]]></xbiz:simple></item><item key="SQLid"><xbiz:simple type="http://www.w3.org/2001/XMLSchema#String"><![CDATA[LandStatusThreeAnly]]></xbiz:simple></item><item key="sqlMap"><xbiz:map><item key="1"><xbiz:simple type="http://www.w3.org/2001/XMLSchema#Long">2015</xbiz:simple></item></xbiz:map></item><item key="countMap"><xbiz:map/></item><item key="whereClause"><xbiz:simple type="http://www.w3.org/2001/XMLSchema#String"/></item></xbiz:map></parameter></parameters><translate-parameter data-type="row-list" transform-idcolumn="true" use-namespace="true" cellname-by-relation="false"><rows-config concept="JH_LNDSTATM" sequence="calculate0,,,,,,FYEAR,FADMINAREA,FYEAR,FADMINAREA,FBUILDLANDSUM,FFARMLANDSUM,FWASTELANDSUM,fFADMINAREACODE"/></translate-parameter></action>
com.justep.model.exception.ModelException: com.justep.model.exception.ModelException: 列名不能为空!
        at com.justep.system.action.Engine.invokeActions(Unknown Source)
        at com.justep.business.server.BusinessServer.doAction(Unknown Source)
        at com.justep.business.server.BusinessServer.doExcute(Unknown Source)
        at com.justep.business.server.BusinessServer.excute(Unknown Source)
        at com.justep.business.server.BusinessServerServlet.execService(Unknown Source)
        at com.justep.business.server.BusinessServerServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at com.justep.x.bs.BusinessServerServlet.service(Unknown Source)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:619)
Caused by: com.justep.model.exception.ModelException: 列名不能为空!
        at com.justep.util.Utils.check(Unknown Source)
        at com.justep.system.data.impl.TableMetaDataImpl.containsColumn(Unknown Source)
        at com.justep.system.transform.Table2Row.transformUserData(Unknown Source)
        at com.justep.system.transform.Table2Row.transform(Unknown Source)
        at com.justep.system.transform.ResponseTransform.transformTable(Unknown Source)
        at com.justep.system.transform.ResponseTransform.transformCompObject(Unknown Source)
        at com.justep.system.transform.ResponseTransform.transform2(Unknown Source)
        at com.justep.system.transform.ResponseTransform.transform(Unknown Source)
        at com.justep.system.action.Engine.translateResult(Unknown Source)
        at com.justep.system.action.Engine.invokeActions(Native Method)
        ... 21 more


91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
35920
发表于 2015-7-10 11:55:50 | 显示全部楼层
sequence="calculate0,,,,,,FYEAR,FADMINAREA,FYEAR,FADMINAREA,FBUILDLANDSUM,FFARMLANDSUM,FWASTELANDSUM,fFADMINAREACODE"


里面的空的是删除的?
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2015-7-10 12:30:51 | 显示全部楼层
本帖最后由 xwnabc 于 2015-7-10 12:37 编辑

grid默认有一列,是bizData的计算关系,作为索引
我给你发一下 js代码:
var data = justep.xbl("dataMain");
        var grid = justep.xbl("grdMain").grid;
        var columnCount = grid.columnIds.length - 1;
//下面开始删除列,从第二列往后全部删除
        for ( var i = columnCount; i >= 1; i--) {
                grid.deleteColumn(i);
        }
//下面开始插入新列
        grid.insertColumn(1, '行政区', "ro", 100);
        grid.insertColumn(2, '农用地', "ro", 100);
        grid.insertColumn(3, '建设用地', "ro", 300);
        grid.insertColumn(4, '未利用地', "ro", 100);
        grid.insertColumn(5, '行政区编码', "ro", 100);
        grid.insertColumn(6, '现状年度', "ro", 100);
        grid.columnIds[1] = 'FADMINAREA';
        grid.columnIds[2] = 'FFARMLANDSUM';
        grid.columnIds[3] = 'FBUILDLANDSUM';
        grid.columnIds[4] = 'FWASTELANDSUM';
        grid.columnIds[5] = 'fFADMINAREACODE';
        grid.columnIds[6] = 'FYEAR';
//下面刷新数据,刚开始grid只有索引列的时候,不会走上面的删除,整个代码没问题,第二次再执行代码逻辑,会进入删除列,下面的代码会报错。
data.refreshData();
回复 支持 反对

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2015-7-10 12:48:45 | 显示全部楼层
jishuang 发表于 2015-7-10 11:55
sequence="calculate0,,,,,,FYEAR,FADMINAREA,FYEAR,FADMINAREA,FBUILDLANDSUM,FFARMLANDSUM,FWASTELANDSUM ...

应该是删除的列,意思删除之后,sequence的位置还得清掉?怎么清?
回复 支持 反对

使用道具 举报

4

主题

1579

帖子

2706

积分

内部用户

积分
2706
发表于 2015-7-10 14:50:15 | 显示全部楼层
本帖最后由 XiaoQLuo 于 2015-7-10 14:53 编辑

这样做问题会比较多,
因为5.2.7版本的data并不支持动态修改列相关定义;
当修改grid的列后需要修改data的相关列定义,否则会出现不可预知的问题
建议使用隐藏和显示列来实现

还有你这帖子应该发到BeX5模块
回复 支持 反对

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2015-7-10 14:56:33 | 显示全部楼层
试过隐藏了 会出现列宽度跟表头不一致的情况,
而且隐藏 在逻辑上感觉不合适。
以我现在的做法,要怎么修改代码?
怎么修改data的列定义?
回复 支持 反对

使用道具 举报

4

主题

1579

帖子

2706

积分

内部用户

积分
2706
发表于 2015-7-10 15:13:51 | 显示全部楼层
xwnabc 发表于 2015-7-10 14:56
试过隐藏了 会出现列宽度跟表头不一致的情况,
而且隐藏 在逻辑上感觉不合适。
以我现在的做法,要怎么修改 ...

data.getUserData('relations');
data.setUserData('relations', relations);
维护:relations、relation-alias、relation-types

同时要确定一下grid的api增加删除列后getColumnIds拿到的列是否正确
回复 支持 反对

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2015-7-10 15:17:54 | 显示全部楼层
在刷新前修改这些属性吗?
回复 支持 反对

使用道具 举报

226

主题

1000

帖子

1931

积分

金牌会员

Rank: 6Rank: 6

积分
1931
QQ
 楼主| 发表于 2015-7-10 15:23:09 | 显示全部楼层
我刚F12看了下 getUserData是grid的方法吧?
回复 支持 反对

使用道具 举报

4

主题

1579

帖子

2706

积分

内部用户

积分
2706
发表于 2015-7-10 15:24:53 | 显示全部楼层
xwnabc 发表于 2015-7-10 15:23
我刚F12看了下 getUserData是grid的方法吧?

不知道你什么版本?后面的版本data上增加了这些方法;

应该在修改grid列后修改data的定义
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-2 20:27 , Processed in 0.066055 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表