首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

透过拖拽Grid改变行的顺序

2012-11-03 
通过拖拽Grid改变行的顺序scriptvar meta [{header:编号,dataIndex:id, name: id},{header:名

通过拖拽Grid改变行的顺序

 <script>     var meta = [        {header:'编号',dataIndex:'id', name: 'id'},        {header:'名称',dataIndex:'name', name: 'name'},        {header:'描述',dataIndex:'descn', name: 'descn'},        {header:'日期',dataIndex:'date', name: 'date', type: 'date', dateFormat: 'Y-m-dTH:i:s', renderer: Ext.util.Format.dateRenderer('Y-m-d')}    ];    var data = [        ['1','name1','descn1','1970-01-15T02:58:04'],        ['2','name2','descn2','1970-01-15T02:58:04'],        ['3','name3','descn3','1970-01-15T02:58:04'],        ['4','name4','descn4','1970-01-15T02:58:04'],        ['5','name5','descn5','1970-01-15T02:58:04']    ];    var grid = new Ext.grid.GridPanel({        height: 380,        width: 450,  renderTo: Ext.getBody(),        enableDragDrop: true,        title: '通过拖拽Grid改变行的顺序',        frame: true,        enableDrag: true,        store: new Ext.data.Store({            autoLoad: true,            proxy: new Ext.data.MemoryProxy(data),            reader: new Ext.data.ArrayReader({}, meta)        }),        columns: meta,        viewConfig: {            columnsText: '显示的列',            scrollOffset: 30,            sortAscText: '升序',            sortDescText: '升序',            forceFit: true        },          stripeRows: true,            autoExpandColumn: 1,            tbar: [{                text: '上移',                iconCls: 'up',                scope: this,                handler: function(){                    buttonMove(-1);                }            }, {                text: '下移',                iconCls: 'down',                scope: this,                handler: function(){                    buttonMove(1);                }            }, '-', {                text: '保存',                iconCls: 'save',                scope: this,                handler: function(){                    var ds = grid.getStore();                    var sortIndex = [];                    for (var i = 0; i < ds.getCount(); i++) {                        sortIndex.push(ds.data.items[i].id);                    }                    Ext.fly('op').dom.value += '------------\n' + sortIndex + '\n';                    Ext.Ajax.request({                        url: 'gridDD_sort.ashx?act=save',                        params: {                            sortIndex: sortIndex                        },                        success: function(response, op){                            var msg = response.responseText;                            var obj = Ext.decode(msg);                            if (obj) {                                msg = obj.success?"新的行顺序已保存!":obj.data;                            }                            Ext.Msg.alert('信息', msg);                        },                        failure: function(response, op){                            Ext.Msg.alert('信息', response.responseText);                        }                    });                }            }]        });                        function buttonMove(toward){            var sm = grid.getSelectionModel();            var data = sm.getSelections();            if (sm.hasSelection()) {                //获取选择行第1行                var rec = sm.getSelected();                var ds = grid.getStore();                //默认的插入行                var rowIndex = ds.indexOfId(rec.id) + toward;                //判断插入是否已选择,如果已选择,重新获取插入行                var ri = []; //插入行的行号数组                for (var i = 1; i < data.length; i++) {                    var index = ds.indexOfId(data[i].id)                    ri.push(index);                }                //对插入行数组进行排序,下移顺序排序,上移反序排序                if (toward == 1) {                    ri.sort(function(x, y){                        if (parseInt(x) > parseInt(y))                             return 1                        else                             return -1                    })                }                else {                    ri.sort(function(x, y){                        if (parseInt(x) > parseInt(y))                             return -1                        else                             return 1                    })                }                //如果插入行是选择行,则插入行前移或后移                for (var i = 0; i < ri.length; i++) {                    if (rowIndex == ri[i])                         rowIndex += toward;                }                //判断插入行是否已在顶部或底部,不是则执行移动操作                if (rowIndex < 0) {                    Ext.Msg.alert('信息', '记录已在顶部');                }                else                     if (rowIndex >= ds.getCount()) {                        Ext.Msg.alert('信息', '记录已在底部');                    }                    else {                        move(rowIndex, data);                    }            }            else {                Ext.Msg.alert('信息', '请选择记录');            }        }                        function move(rindex, data){            var ds = grid.getStore(), rdata = ds.getAt(rindex); // 获取插入行的记录            var toward = 0; // 默认是上移操作            var index = ds.indexOfId(data[0].id);                        if (rindex > index){                toward = 1 // 如果是下移,修改方向值            }                            // 移除选择行            for (i = 0; i < data.length; i++) {                ds.remove(ds.getById(data[i].id));            }            // 根据id获取插入行的新位置并根据移动操作计算出插入位置            rindex = ds.indexOfId(rdata.id) + toward;            // 从插入位置依次插入选择行            for (i = 0; i < data.length; i++) {                ds.insert(rindex, data[i]);                rindex++;            }                        var sm = grid.getSelectionModel();            if (sm)sm.selectRecords(data);// 重新选择选择行        }                new Ext.dd.DropTarget(grid.getEl(), {            ddGroup: grid.ddGroup || 'GridDD',            grid: grid,            gridDropTarget: this,            notifyDrop: function(dd, e, data){                                var t = e.getTarget();// 获取选择行                var rindex = this.grid.view.findRowIndex(t);                if (rindex === false)                     return false;                var ds = this.grid.getStore();                var rdata = ds.getAt(rindex);                                // 判断插入行是否选择行,如果是不允许插入                for (i = 0; i < data.selections.length; i++) {                    var rowIndex = ds.indexOfId(data.selections[i].id);                    if (rindex == rowIndex)                         rindex = false;                }                move(rindex, data.selections)                return true;            },                        notifyOver: function(dd, e, data){                var t = e.getTarget();                var rindex = this.grid.view.findRowIndex(t);                var ds = this.grid.getStore();                for (i = 0; i < data.selections.length; i++) {                    var rowIndex = ds.indexOfId(data.selections[i].id);                    if (rindex == rowIndex)                         rindex = false;                }                return (rindex === false) ? this.dropNotAllowed : this.dropAllowed;            }        });    </script>

??

热点排行