`
babydeed
  • 浏览: 235726 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过拖拽Grid改变行的顺序

    博客分类:
  • Ext
阅读更多
 <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>

  

  • 大小: 26.3 KB
分享到:
评论

相关推荐

    js 表格排序(编辑+拖拽+缩放)

    Table body{ font-size:12px} #tab{ border-collapse: collapse;} .edit{ height:16px; width:98%; background-color:#EFF7FF; font-size:12px; border:0px;} #tab thead td{ background:url(/upload/201005/...

    EXT教程EXT用大量的实例演示Ext实例

    2.11.1. 先看看怎么拖拽改变表格的大小 2.11.2. 再看怎么在表格里拖动行 2.11.2.1. 无用功 之 同一个表格里拖拽 2.11.2.2. 无间道 之 从这个表格拖到另一个表格 2.11.2.3. 无疆界 之 从表格里拖到树上 3. 歌颂...

    EXT2.0中文教程

    2.11.1. 先看看怎么拖拽改变表格的大小 2.11.2. 再看怎么在表格里拖动行 2.11.2.1. 无用功 之 同一个表格里拖拽 2.11.2.2. 无间道 之 从这个表格拖到另一个表格 2.11.2.3. 无疆界 之 从表格里拖到树上 3. 歌颂吧!...

    Ext 开发指南 学习资料

    2.11.2. 再看怎么在表格里拖动行 2.11.2.1. 无用功 之 同一个表格里拖拽 2.11.2.2. 无间道 之 从这个表格拖到另一个表格 2.11.2.3. 无疆界 之 从表格里拖到树上 2.12. 大步流星,后台排序 2.13. grid与右键菜单 3. ...

    掏钱学Ext(完整版) 附全部源码

    2.7. 还差:表头菜单,分页,可编辑表格,去服务器读取数据,改变大小,表格间拖拽,树与表格间拖拽。 3. 歌颂吧!只为了树也要学ext。 3.1. 真的,我是为了树,才开始学ext的。 3.2. 传统是先做出一棵树来。 ...

    wpf源码大全 精通C#3.0图书源码 详细源码 学习好用

    GridDemo 使用Grid进行布局。 InkCanvasDemo 使用InkCanvas的示例。 SimpleDiagDox 简单对话框示例程序。 SimpleStackPanelDemo 使用StackPanel进行布局。 WrapPanelDemo 使用WrapPanelDemo...

    C#DataGridView中的常用技巧

    5、动态改变列是否显示,和动态改变列的显示顺序 Change the Order of the Columns in the Windows Forms DataGridView Control Samples: customersDataGridView.Columns["CustomerID"].Visible = false; ...

    flash shiti

    现通过实例属性检查器将该实 例的颜色改为#FF0033,透明度改为80%。请问此时Library 中的Symbol 1 元件将会发生什么 变化? □ A. 颜色也变为#FF0033 □ B. 透明度也变为80% □ C. 颜色变为#FF0033,透明度变为80% ...

    易语言程序免安装版下载

    修改高级表格支持库,通过鼠标调整行高列宽时不改变当前光标行列号。 8. 修改BUG:在IDE中打开源代码文件(.e)后,高级选择夹组件不能正确切换到“现行子夹”属性设定的子夹。 9. 修改BUG:矢量动画支持库中的...

    Qt Creator 的安装和hello world 程序+其他程序的编写--不是一般的好

    16.我们拖动标签一角的蓝点,将全部文字显示出来。 17.再次按下运行按钮,便会出现helloworld。 到这里helloworld 程序便完成了。 Qt Creator 编译的程序,在其工程文件夹下会有一个debug 文件夹,其中有程序的.exe ...

    Visual C++ 编程资源大全(英文源码 表单)

    31.zip Dragging a dialog by clicking anywhere on it 点击任何地方拖动对话框(11KB)&lt;END&gt;&lt;br&gt;32,32.zip Splash screen with text on it that uses its own thread 通过自己的线程在Splash对话框中显示...

Global site tag (gtag.js) - Google Analytics