ext拖拽、上下箭头排序

来源:互联网 发布:电脑网络电缆测试仪 编辑:程序博客网 时间:2024/05/19 02:22

function changeOrder(grid,commandName) { 
         var grid=eval(grid);
         var selectModel=grid.getSelectionModel();
         var store = grid.getStore(); 
         var selectedRowIndex=selectModel.lastActive;
         //获取选中行  
         var selectedRow = selectModel.getSelected();  
         //如果没有选中行,提示错误  
         if (!selectedRow) {  
             Ext.MessageBox.alert('${app:i18n('prompt')}',"请选中要调整顺序的行!");  
             return;  
         }  
         if (selectModel.getSelections().length>1) {  
             Ext.MessageBox.alert('${app:i18n('prompt')}','使用【最上】【上移】【下移】【最下】按钮调整顺序的方式,暂只支持单选模式,!');  
             return;  
         }  
         
          if((commandName=='top'||commandName=='up')&&selectedRowIndex + 1 == 1){
            Ext.Msg.alert('${app:i18n('prompt')}',"当前已经是第一行。");
            return;
           }
           
           if((commandName=='bottom'||commandName=='down')&&selectedRowIndex + 1 == store.getCount()){
            Ext.Msg.alert('${app:i18n('prompt')}',"当前已经是最后一行。");
            return;
           }
         var cindex = undefined;  
         var total = store.getTotalCount();  
         var startRow=store.getAt(0);
         var endRow=store.getAt(total-1);
         var changRow=null;
         switch (commandName) {  
             case "top":  
                changRow=startRow;  
                 break;  
             case "bottom":  
                 changRow=endRow;
                 break;  
             case "up":  
                 if (selectedRowIndex != undefined && selectedRowIndex > 0) {  
                     cindex = selectedRowIndex - 1;  
                     changRow=store.getAt(cindex);   
                 }  
                 else {  
                     cindex = 0;   
                     changRow=store.getAt(cindex);
                 }  
                 break;  
             case "down":  
                 if (selectedRowIndex != undefined && selectedRowIndex < total -1) {  
                     cindex = selectedRowIndex + 1;
                     changRow=store.getAt(cindex);  
                 }  
                 else {  
                     cindex = total -1;
                     changRow=store.getAt(cindex);  
                 }  
                 break;  
             default:  
                 Ext.MessageBox.alert('${app:i18n('prompt')}',"没有找到正确的CommandName!");  
         }  
        sendMsg(selectedRow.data,changRow.data,store);
     }

      function sendMsg(obj1,obj2,store){
          // 将数据放到另一个数组中
       var selFuns  = [];
       selFuns .push(Ext.util.JSON.encode(obj1));
       selFuns .push(Ext.util.JSON.encode(obj2));
         
         //调用sava方法保存排序信息
         Ext.Ajax.request({params: {funExt:selFuns},
                url: "../kbskoujing/saveKbsSituationOrder.action",
                success: function(response) {
                    var resp = Ext.util.JSON.decode(response.responseText);
                    if (resp.status == "ok") {
                        store.load();
                    }
                }
            });

      }


拖拽

Ext.onReady(function(){
       var fristGridDropTargetEl = gridView.getView().mainBody;
        var fristGridDropTarget = new Ext.dd.DropTarget(fristGridDropTargetEl, {
                ddGroup:"gridDDGroup",
                notifyDrop:function(ddSource, e, data){
         var grid = data.grid;  
         var store = grid.store;  
         var rows = grid.getSelectionModel().getSelections();
         var selecIndex=grid.getSelectionModel().lastActive;
         if (rows.length>1) {  
             Ext.MessageBox.alert('${app:i18n('prompt')}','拖拽排序,暂只支持单选模式!');  
             return;  
         }    
         var cindex = ddSource.getDragData(e).rowIndex; 
         if (cindex == undefined || cindex < 0) {  
             e.cancel = true;  
             return;  
         }  
         var selectedRow=store.getAt(selecIndex);
         var changRow=store.getAt(cindex);
          sendMsg(selectedRow.data,changRow.data,store);
           }
        });
     });


前台传array数组,后台处理如下:

private List<KbsSituation> selFuns;
    private List funExt;//省略set、get方法

//保存排序信息
    public String saveKbsSituationOrder() {
        if (funExt != null && funExt.size() > 0) {
            JSONObject jsonObj = null;

           String[] dateFormats = new String[]{"yyyy-MM-dd HH:mm:ss"};  //  由于 yyyy-MM-dd't' HH:mm:ss的格式没有空格如:2008-08-12 01:20:30

           //后台会报错,所以要在实体上面加注解 并且在get方法上面如:@JSON(format="yyyy-MM-dd HH:mm:ss"),这样就没有带T的格式

          // 将存放json字符串的对象转换为JSONArray类型
            JSONArray array = JSONArray.fromObject(funExt);
            Object[] objArray = array.toArray(); // 将JSONArray转换为对象数组
            selFuns = new ArrayList<KbsSituation>();
            for (Object obj : objArray) {
                jsonObj = JSONObject.fromObject(obj);// 将对象类型转换为json对象 由于日期类型丢失,所以要转换

                JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(dateFormats));

                KbsSituation kbsSituation = (KbsSituation) JSONObject.toBean(jsonObj,KbsSituation.class);
                selFuns.add(kbsSituation);
            }
            if (null != selFuns && selFuns.size() > 0) {
                KbsSituation situation0 = selFuns.get(0);
                KbsSituation situation1 = selFuns.get(1);
                List<KbsSituation> kbsSituations = new ArrayList<KbsSituation>();
                if (null != situation0 && null != situation1) {
                    Long seq0 = situation0.getSituationSequence();
                    Long seq1 = situation1.getSituationSequence();
                    situation0.setSituationSequence(seq1);
                    situation1.setSituationSequence(seq0);
                    kbsSituations.add(situation0);
                    kbsSituations.add(situation1);
                }
                kbsSituationBiz.updateKbsSituationList(kbsSituations);
                status = "ok";
            }
        }
        return SUCCESS;
    }


0 0
原创粉丝点击