Drag and Drop from Grid to Grid Example,增加上下、左右移动的功能。

版本:extjs 2.3.0

需求:自定义可排序列选择。

例子:http://localhost/ext230/examples/dd/dnd_grid_to_grid.html

封装:暂无,给大家参考下。

效果如图1所示。

图1


c.html:

[html]  view plain copy
  1. <html>  
  2. <head>  
  3.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  
  4.     <title>test</title>  
  5.   
  6.     <link rel="stylesheet" type="text/css" href="./js/extjs/resources/css/ext-all.css" />  
  7.   
  8.   
  9.     <script type="text/javascript" src="./js/extjs/ext-base.js"></script>  
  10.   
  11.     <script type="text/javascript" src="./js/extjs/ext-all.js"></script>  
  12.   
  13.     <script type="text/javascript" src="c.js"></script>  
  14.   
  15. </head>  
  16. <body>  
  17.   
  18.   
  19. <h1>Drag and Drop from Grid to Grid Example</h1>  
  20. <p>This example shows how to setup two way drag and drop from one GridPanel to another.</p>      
  21. <p>Note that the js is not minified so it is readable. See <a href="dnd_grid_to_grid.js">dnd_grid_to_grid.js</a>.</p>  
  22. <div id="panel"></div>  
  23.   
  24.   
  25. </body>  
  26. </html>  

c.js

[javascript]  view plain copy
  1. /* 
  2.  * Ext JS Library 2.3.0 
  3.  * Copyright(c) 2006-2009, Ext JS, LLC. 
  4.  * licensing@extjs.com 
  5.  *  
  6.  * http://extjs.com/license 
  7.  */  
  8.   
  9. Ext.onReady(function(){  
  10.     Ext.QuickTips.init();  
  11.   
  12.   
  13.     var myData = {  
  14.         records : [  
  15.             { name : "名称0", column1 : "0", column2 : "0" },  
  16.             { name : "名称1", column1 : "1", column2 : "1" },  
  17.             { name : "名称2", column1 : "2", column2 : "2" },  
  18.             { name : "名称3", column1 : "3", column2 : "3" },  
  19.             { name : "名称4", column1 : "4", column2 : "4" },  
  20.             { name : "名称5", column1 : "5", column2 : "5" },  
  21.             { name : "名称6", column1 : "6", column2 : "6" },  
  22.             { name : "名称7", column1 : "7", column2 : "7" },  
  23.             { name : "名称8", column1 : "8", column2 : "8" },  
  24.             { name : "名称9", column1 : "9", column2 : "9" },  
  25.             { name : "名称10", column1 : "9", column2 : "9" },  
  26.             { name : "名称11", column1 : "9", column2 : "9" },  
  27.             { name : "名称12", column1 : "9", column2 : "9" },  
  28.             { name : "名称13", column1 : "9", column2 : "9" },  
  29.             { name : "名称14", column1 : "9", column2 : "9" },  
  30.             { name : "名称15", column1 : "9", column2 : "9" },  
  31.             { name : "名称16", column1 : "9", column2 : "9" },  
  32.             { name : "名称17", column1 : "9", column2 : "9" },  
  33.             { name : "名称18", column1 : "9", column2 : "9" },  
  34.             { name : "名称19", column1 : "9", column2 : "9" }  
  35.         ]  
  36.     };  
  37.   
  38.   
  39.     // Generic fields array to use in both store defs.  
  40.     var fields = [  
  41.        {name: 'name', mapping : 'name'},  
  42.        {name: 'column1', mapping : 'column1'},  
  43.        {name: 'column2', mapping : 'column2'}  
  44.     ];  
  45.       
  46.     // create the data store  
  47.     var firstGridStore = new Ext.data.JsonStore({  
  48.         fields : fields,  
  49.         data   : myData,  
  50.         root   : 'records'  
  51.     });  
  52.       
  53.   
  54.     // Column Model shortcut array  
  55.     var cols = [  
  56.         { id : 'name', header: "列名称",  
  57.         //width: 160,  
  58.         sortable: true,  
  59.         dataIndex: 'name'  
  60.     }//,  
  61.         //{header: "column1", width: 50, sortable: true, dataIndex: 'column1'},  
  62.         //{header: "column2", width: 50, sortable: true, dataIndex: 'column2'}  
  63.     ];  
  64.       
  65.     // declare the source Grid  
  66.     var firstGrid = new Ext.grid.GridPanel({  
  67.         ddGroup          : 'secondGridDDGroup',  
  68.         store            : firstGridStore,  
  69.         columns          : cols,  
  70.         enableDragDrop   : true,  
  71.         stripeRows       : true,  
  72.         autoExpandColumn : 'name',  
  73.         //width            : 325,  
  74.         height   : 272,  
  75.         columnWidth:0.4,  
  76.         //region           : 'west',  
  77.         title            : '待选择列'  
  78.     });  
  79.   
  80.     var secondGridStore = new Ext.data.JsonStore({  
  81.         fields : fields,  
  82.         root   : 'records'  
  83.     });  
  84.       
  85.     // create the destination Grid  
  86.     var secondGrid = new Ext.grid.GridPanel({  
  87.         ddGroup          : 'firstGridDDGroup',  
  88.         store            : secondGridStore,  
  89.         columns          : cols,  
  90.         enableDragDrop   : true,  
  91.         stripeRows       : true,  
  92.         autoExpandColumn : 'name',  
  93.         height   : 272,  
  94.         columnWidth:0.4,  
  95.         title            : '已选择列'  
  96.     });  
  97.   
  98.     var lrPanel = {  
  99.         columnWidth:0.1,  
  100.         height   : 300,  
  101.           
  102.         items : [  
  103.             new Ext.Button({  
  104.                 text:">   ",  
  105.                 style: 'margin: 70px 0px 0px 15px',  
  106.                 handler : function() {  
  107.                     if (firstGrid.getSelectionModel().hasSelection())  
  108.                     {  
  109.                         // 数据行数  
  110.                         var total = secondGridStore.getCount();  
  111.                         var records = firstGrid.getSelectionModel().getSelections();  
  112.                         for (var i = 0; i < records.length; i++) {  
  113.                             var record = records[i];  
  114.                             firstGridStore.remove(record);  
  115.                             secondGridStore.insert(total + i, record);  
  116.                         }  
  117.                     }  
  118.                 }  
  119.             }),  
  120.             new Ext.Button({  
  121.                 text:">>",  
  122.                 style: 'margin: 15px 0px 0px 15px',  
  123.                 handler : function() {  
  124.                     // 数据行数  
  125.                     var total = secondGridStore.getCount();  
  126.                     var i = 0;  
  127.                     while (firstGridStore.getCount() > 0)  
  128.                     {  
  129.                         var record = firstGridStore.getAt(0);  
  130.                         firstGridStore.remove(record);  
  131.                         secondGridStore.insert(total + i, record);  
  132.                         i ++;  
  133.                     }  
  134.                 }  
  135.             }),  
  136.             new Ext.Button({  
  137.                 text:"   <",  
  138.                 style: 'margin: 15px 0px 0px 15px',  
  139.                 handler : function() {  
  140.                     if (secondGrid.getSelectionModel().hasSelection())  
  141.                     {  
  142.                         // 数据行数  
  143.                         var total = firstGridStore.getCount();  
  144.                         var records = secondGrid.getSelectionModel().getSelections();  
  145.                         for (var i = 0; i < records.length; i++) {  
  146.                             var record = records[i];  
  147.                             secondGridStore.remove(record);  
  148.                             firstGridStore.insert(total + i, record);  
  149.                         }  
  150.                     }  
  151.                 }  
  152.             }),  
  153.             new Ext.Button({  
  154.                 text:"<<",  
  155.                 style: 'margin: 15px 0px 0px 15px',  
  156.                 handler : function() {  
  157.                     // 数据行数  
  158.                     var total = firstGridStore.getCount();  
  159.                     var i = 0;  
  160.                     while (secondGridStore.getCount() > 0)  
  161.                     {  
  162.                         var record = secondGridStore.getAt(0);  
  163.                         secondGridStore.remove(record);  
  164.                         firstGridStore.insert(total + i, record);  
  165.                         i ++;  
  166.                     }  
  167.                 }  
  168.             })  
  169.         ]  
  170.     };  
  171.   
  172.     var udPanel = {  
  173.         columnWidth:0.1,  
  174.         height   : 300,  
  175.         items : [  
  176.             new Ext.Button({  
  177.                 text:"向上",  
  178.                 style: 'margin: 90px 0px 0px 10px',  
  179.                 handler : function() {  
  180.                     if (secondGrid.getSelectionModel().hasSelection())  
  181.                     {  
  182.                         var record = secondGrid.getSelectionModel().getSelected();  
  183.                         //数据行数  
  184.                         var total = secondGridStore.getCount();  
  185.                         for(var i=0; i < total - 1; i++){  
  186.                             var temp = secondGridStore.getAt(i);  
  187.                             if (temp.get('name') == record.get('name'))  
  188.                             {  
  189.                                 break;  
  190.                             }  
  191.                             var next = secondGridStore.getAt(i + 1);  
  192.                             if (next.get('name') == record.get('name'))  
  193.                             {  
  194.                                 secondGridStore.remove(next);  
  195.                                 secondGridStore.insert(i, next);  
  196.                             }  
  197.                         }  
  198.                     }  
  199.                 }  
  200.             }),  
  201.             new Ext.Button({  
  202.                 text:"向下",  
  203.                 style: 'margin: 15px 0px 0px 10px',  
  204.                 handler : function() {  
  205.                     if (secondGrid.getSelectionModel().hasSelection())  
  206.                     {  
  207.                         var record = secondGrid.getSelectionModel().getSelected();  
  208.                         //数据行数  
  209.                         var total = secondGridStore.getCount();  
  210.                         for(var i=0; i < total - 1; i++){  
  211.                             var next = secondGridStore.getAt(i);  
  212.                             if (next.get('name') == record.get('name'))  
  213.                             {  
  214.                                 secondGridStore.remove(next);  
  215.                                 secondGridStore.insert(i + 1, next);  
  216.                             }  
  217.                         }  
  218.                     }  
  219.                 }  
  220.             })  
  221.         ]  
  222.     };  
  223.   
  224.       
  225.     //Simple 'border layout' panel to house both grids  
  226.     var displayPanel = new Ext.Panel({  
  227.         width    : 650,  
  228.         height   : 300,  
  229.         //layout   : 'border',  
  230.         layout : 'column',  
  231.         renderTo : 'panel',  
  232.         items    : [  
  233.             firstGrid,  
  234.             lrPanel,  
  235.             secondGrid,  
  236.             udPanel  
  237.         ],  
  238.         bbar    : [  
  239.             '->'// Fill  
  240.             {  
  241.                 text    : '确定',  
  242.                 handler : function() {  
  243.                     // 数据行数  
  244.                     var total = secondGridStore.getCount();  
  245.                     var results = "";  
  246.                     if (total > 0)  
  247.                     {  
  248.                         for (var i = 0; i < total; i ++)  
  249.                         {  
  250.                             var record = secondGridStore.getAt(i);  
  251.                             results += record.get("name") + ",";  
  252.                         }  
  253.                         results = results.substring(0, results.length - 1);  
  254.                     }  
  255.                     alert("选择的列名称:" + results);  
  256.                 }  
  257.             },  
  258.             {  
  259.                 text    : '重置',  
  260.                 handler : function() {  
  261.                     //refresh source grid  
  262.                     firstGridStore.loadData(myData);  
  263.                       
  264.                     //purge destination grid  
  265.                     secondGridStore.removeAll();  
  266.                 }  
  267.             }  
  268.         ]  
  269.     });  
  270.   
  271.     // used to add records to the destination stores  
  272.     var blankRecord =  Ext.data.Record.create(fields);  
  273.   
  274.     /**** 
  275.     * Setup Drop Targets 
  276.     ***/  
  277.     // This will make sure we only drop to the view container  
  278.     var firstGridDropTargetEl =  firstGrid.getView().el.dom.childNodes[0].childNodes[1];  
  279.     var firstGridDropTarget = new Ext.dd.DropTarget(firstGridDropTargetEl, {  
  280.         ddGroup    : 'firstGridDDGroup',  
  281.         copy       : true,  
  282.         notifyDrop : function(ddSource, e, data){  
  283.               
  284.             // Generic function to add records.  
  285.             function addRow(record, index, allItems) {  
  286.                   
  287.                 // Search for duplicates  
  288.                 var foundItem = firstGridStore.find('name', record.data.name);  
  289.                 // if not found  
  290.                 if (foundItem  == -1) {  
  291.                     firstGridStore.add(record);  
  292.                       
  293.                     // Call a sort dynamically  
  294.                     //firstGridStore.sort('name', 'ASC');  
  295.                       
  296.                     //Remove Record from the source  
  297.                     ddSource.grid.store.remove(record);  
  298.                 }  
  299.             }  
  300.   
  301.             // Loop through the selections  
  302.             Ext.each(ddSource.dragData.selections ,addRow);  
  303.             return(true);  
  304.         }  
  305.     });       
  306.   
  307.       
  308.     // This will make sure we only drop to the view container  
  309.     var secondGridDropTargetEl = secondGrid.getView().el.dom.childNodes[0].childNodes[1]  
  310.       
  311.     var destGridDropTarget = new Ext.dd.DropTarget(secondGridDropTargetEl, {  
  312.         ddGroup    : 'secondGridDDGroup',  
  313.         copy       : false,  
  314.         notifyDrop : function(ddSource, e, data){  
  315.               
  316.             // Generic function to add records.  
  317.             function addRow(record, index, allItems) {  
  318.                   
  319.                 // Search for duplicates  
  320.                 var foundItem = secondGridStore.find('name', record.data.name);  
  321.                 // if not found  
  322.                 if (foundItem  == -1) {  
  323.                     secondGridStore.add(record);  
  324.                     // Call a sort dynamically  
  325.                     //secondGridStore.sort('name', 'ASC');  
  326.               
  327.                     //Remove Record from the source  
  328.                     ddSource.grid.store.remove(record);  
  329.                 }  
  330.             }  
  331.             // Loop through the selections  
  332.             Ext.each(ddSource.dragData.selections ,addRow);  
  333.             return(true);  
  334.         }  
  335.     });   
  336. });  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值