关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、3102411850 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 7519|回复: 3

[UI标签] datagrid查询时如何加入自定义排序

[复制链接]
发表于 2018-9-4 10:36:05 | 显示全部楼层 |阅读模式
datagrid对象查询时 排序只能按照某一字段升降排序,是否有方法实现自定义排序呢
发表于 2018-9-4 22:45:56 | 显示全部楼层
看UI标签库文档,有排序参数
 楼主| 发表于 2018-9-5 11:35:38 | 显示全部楼层
UI标签库能多字段排序,但排序规则只能按照升降序。
如果后台添加dataGrid对象有此方法么,
没有只能自己写sql语句拼接了
 楼主| 发表于 2018-9-6 14:13:24 | 显示全部楼层
自定义排序已解决。
1.在每个实体类对应的Service层的 setDataGrid()方法中,
在commonService.getDataGridReturn(cq, true);执行前加入如下判断:
        //查询条件组装器
                org.jeecgframework.core.extend.hqlsearch.HqlGenerateUtil.installHql(cq, employeeDeclare, parameterMap);
                if(dataGrid.getSort()==null||"".equals(dataGrid.getSort())) {
                //获取优先排序的状态码
                    Integer lv = jeecgRepo.getDeclareInitStatusNumber(user);
                //自定义排序Sql语句
                String customFormula = " case this_.declare_status when "+lv+" then 1 when "+(lv-1)+" then 2 when "+(lv-2)+" then 3 ELSE 4 END,this_.declare_status desc";
                //新增公共方法 getDataGridReturn
                        commonRepo.getDataGridReturn(cq,true,"declareStatus",customFormula);
                }else {
                        commonService.getDataGridReturn(cq, true);
                }
2.commonRepo.getDataGridReturn()方法中将原先的代码中的排序去掉,替换成
        criteria.addOrder(CustomOrder.getOrder(propertyName, customFormula));
而CustomOrder继承Order类
public class CustomOrder extends Order{

//        private String propertyName;
        private String customFormula;
        protected CustomOrder(String propertyName,String customFormula) {
                super(propertyName, true);
//                this.propertyName=propertyName;
                this.customFormula=customFormula;
                // TODO Auto-generated constructor stub
        }
        public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery)throws HibernateException {
//        String[] columns = criteriaQuery.getColumnsUsingProjection(criteria,propertyName);
        //customFormula自定义你的字段
        //for example
//        return " case "+columns[0]+" when 12 then 1 "
//                        + "when 11 then 2 "
//                        + "when 10 then 3 "
//                        + "else 4 end ,"+columns[0]+" desc";
        return customFormula;

    }
        public static CustomOrder getOrder(String propertyName,String customFormula) {
        return new CustomOrder(propertyName, customFormula);
    }

}
3.在相应申报List.jsp 页面 的dataGrid标签中删掉  sortName="declareStatus" sortOrder="desc" 属性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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