今天做项目的时候,发现easyui中datagrid绑定到table的翻页功能不能用了,提示信息是
“无法绑定由多个部分组成的标识符 "(数据库表名或表的别名).字段"”
结果查询bug发现是在用sql语句查询多张表数据时(如使用inner join),当多张表中有相同的字段时就需要在sql语句中采用的 表的别名 或 字段的别名,如果不采用别名就会注明某张表的某个字段,例如:
a表中有id字段,b表中也有id字段,但我只想要提取a表中的id字段,所以就会这样写:
select a.id,a.~~,b.~~ from a inner join b where a.id = b.~~
此时前端页面用js写datagrid绑定到datatable时一般会直接写明 字段,而不会带上表名,如:
fcolumns[fcolumns.length] = { field: 'id', title:"XXX", checkbox: true };
那么这个时候你使用easyui的自带的翻页功能时,就会出现前面提到的错误异常信息了。
好了,关键点来了,上述问题的解决方法很简单,就是在 sql语句中将需要select的字段中给出现(数据库表名或表的别名).字段的字段取一个别名就行了,然后datatable绑定的时候field填写修改的别名就可以了。例如上面的sql语句可以修改为:
select a.id as xxxid,a.~~,b.~~ from a inner join b where a.id = b.~~
js绑定可以修改为:
fcolumns[fcolumns.length] = { field: 'xxxid', title:"XXX", checkbox: true };
这个时候在重新编译一下工程项目,发现翻页可以使用了,那就恭喜你成功了!