ExtJS5学习之Grid与Grid之间的数据拖拽

    拖拽是一个提升用户体验的一个特色功能,虽然不是必需的,但如果添加上此功能,必然就立马变得高大上了,有木有。Grid与Grid之间的数据拖拽是由gridviewdragdrop插件,官方源码已经内置了该插件,无须自己实现,进行一些简单配置就完事儿了。下面是示例代码:

    

Js代码  

  1. Ext.require([  
  2.     'Ext.grid.*',  
  3.     'Ext.data.*',  
  4.     'Ext.dd.*'  
  5. ]);  
  6.   
  7. Ext.define('DataObject', {  
  8.     extend: 'Ext.data.Model',  
  9.     fields: ['name', 'column1', 'column2']  
  10. });  
  11.   
  12. Ext.onReady(function(){  
  13.   
  14.     var myData = [  
  15.         { name : "Rec 0", column1 : "0", column2 : "0" },  
  16.         { name : "Rec 1", column1 : "1", column2 : "1" },  
  17.         { name : "Rec 2", column1 : "2", column2 : "2" },  
  18.         { name : "Rec 3", column1 : "3", column2 : "3" },  
  19.         { name : "Rec 4", column1 : "4", column2 : "4" },  
  20.         { name : "Rec 5", column1 : "5", column2 : "5" },  
  21.         { name : "Rec 6", column1 : "6", column2 : "6" },  
  22.         { name : "Rec 7", column1 : "7", column2 : "7" },  
  23.         { name : "Rec 8", column1 : "8", column2 : "8" },  
  24.         { name : "Rec 9", column1 : "9", column2 : "9" }  
  25.     ];  
  26.   
  27.     // create the data store  
  28.     var firstGridStore = Ext.create('Ext.data.Store', {  
  29.         model: 'DataObject',  
  30.         data: myData  
  31.     });  
  32.   
  33.   
  34.     // Column Model shortcut array  
  35.     var columns = [  
  36.         {text: "Record Name", flex: 1, sortable: true, dataIndex: 'name'},  
  37.         {text: "column1", width: 70, sortable: true, dataIndex: 'column1'},  
  38.         {text: "column2", width: 70, sortable: true, dataIndex: 'column2'}  
  39.     ];  
  40.   
  41.     // declare the source Grid  
  42.     var firstGrid = Ext.create('Ext.grid.Panel', {  
  43.         viewConfig: {  
  44.             plugins: {  
  45.                 ptype: 'gridviewdragdrop',  
  46.                 dragGroup: 'firstGridDDGroup',  
  47.                 dropGroup: 'secondGridDDGroup'  
  48.             },  
  49.             listeners: {  
  50.                 drop: function(node, data, dropRec, dropPosition) {  
  51.                     var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view';  
  52.                     Ext.example.msg("Drag from right to left", 'Dropped ' + data.records[0].get('name') + dropOn);  
  53.                 }  
  54.             }  
  55.         },  
  56.         store            : firstGridStore,  
  57.         columns          : columns,  
  58.         stripeRows       : true,  
  59.         title            : 'Grid-1',  
  60.         margins          : '0 2 0 0'  
  61.     });  
  62.   
  63.     var secondGridStore = Ext.create('Ext.data.Store', {  
  64.         model: 'DataObject'  
  65.     });  
  66.   
  67.     var secondGrid = Ext.create('Ext.grid.Panel', {  
  68.         viewConfig: {  
  69.             plugins: {  
  70.                 ptype: 'gridviewdragdrop',  
  71.                 dragGroup: 'secondGridDDGroup',  
  72.                 dropGroup: 'firstGridDDGroup'  
  73.             },  
  74.             listeners: {  
  75.                 drop: function(node, data, dropRec, dropPosition) {  
  76.                     var dropOn = dropRec ? ' ' + dropPosition + ' ' + dropRec.get('name') : ' on empty view';  
  77.                     Ext.example.msg("Drag from left to right", 'Dropped ' + data.records[0].get('name') + dropOn);  
  78.                 }  
  79.             }  
  80.         },  
  81.         store            : secondGridStore,  
  82.         columns          : columns,  
  83.         stripeRows       : true,  
  84.         title            : 'Grid-2',  
  85.         margins          : '0 0 0 3'  
  86.     });  
  87.   
  88.     var displayPanel = Ext.create('Ext.Panel', {  
  89.         width        : 650,  
  90.         height       : 300,  
  91.         layout       : {  
  92.             type: 'hbox',  
  93.             align: 'stretch',  
  94.             padding: 5  
  95.         },  
  96.         renderTo     : 'panel',  
  97.         defaults     : { flex : 1 },  
  98.         items        : [  
  99.             firstGrid,  
  100.             secondGrid  
  101.         ],  
  102.         dockedItems: {  
  103.             xtype: 'toolbar',  
  104.             dock: 'bottom',  
  105.             items: ['->',  
  106.                 {  
  107.                     text: '重置两个Grid',  
  108.                     handler: function(){  
  109.                         firstGridStore.loadData(myData);  
  110.                         secondGridStore.removeAll();  
  111.                     }  
  112.                 }]  
  113.         }  
  114.     });  
  115. });  

示例截图:


 接下来打算研究下treePanel的节点拖拽。

代码请在附件里下载。如有疑问,请加裙咨询

转载:http://iamyida.iteye.com/blog/2190441

时间: 2024-10-26 05:48:10

ExtJS5学习之Grid与Grid之间的数据拖拽的相关文章

VC创建客户区窗口、列表框之间项的拖拽操作

创建客户区窗口 列表框之间项的拖拽操作 在发送绘画(paint)消息时,系统是如何识别某个窗口的客户区或非客户区?当我用 ::CreateWindow 创建窗口时,如何指定客户区矩形? 在创建窗口时不必指定客户区,当收到 WM_NCCALCSIZE 消息时才指定客户区.不管什么时候,只要 Windows 想知道窗口客户区的大小,它便会发送这个消息.在 MFC 中实现 OnNcCalcSize 处理例程.该处理函数有两个参数,从 WPARAM 和 LPARAM 转换而来: void OnNcCal

OpenCV学习(6) 文件和Mat之间的数据交换

      有时候为了便于调试算法,我们需要从文本文件或二进制文件中读取数据,并把数据放到相应的矩阵中去.我们通常可以通过下面的函数实现.   1.从二进制文件中读取数据.      新建一个txt文件 input.txt,在vs2010中,右键点击该文件,选择open with,然后选择Binary Editor,就可以用二进制的方式打开文件了. 编辑文件并保存之后,我们可以用下面的函数把数据读入到矩阵中去. int gMophEx::LoadData(string fileName, cv:

Extjs4实现两个GridPanel之间数据拖拽功能具体方法_javascript技巧

1.之前在winForm上有看过在选择数据时会将一些数据放在待选框中,而用户可以将想要选择的数据放到备选框中,那么如何用Extjs实现类似功能,我们选择用两个gridPanel来模拟其中的备选框和待选框.如下图所示: 定义代码如下: 复制代码 代码如下:          {               xtype:'gridpanel',               multiSelect: true,                id:'staff',                 x:

创建客户区窗口,列表框之间项的拖拽操作

我写了一个小类库,其中包含一个类,CDragDropMgr,用这个类可以在自己的应用程序窗口间添加拖拽行为.我还写了一个测试程序,DDTest,示范了如何使用 CDragDropMgr 类(参见 Figure 2).Figure 3 是程序运行的画面.DDTest 有两个列表框和一个编辑框.你可以将第一个列表框中的项目拖拽到第二个列表框,或者编辑框.此外,你还能在第二个列表框里通过拖拽重排项目.DDTest 就是使用 CDragDropMgr 来实现上述这些功能的.下面我首先示范如何使用 CDr

30-fineui如何在grid中实现表头与数据之间插入一行

问题描述 fineui如何在grid中实现表头与数据之间插入一行 问题如题,想要在表头和绑定的数据指甲剪插入一行,在这一行中显示图片链接,遮盖怎么实现呀?有大神没有?

请问怎样实现多个grid之间的数据互相拖拽?

问题描述 ext官方给的例子,只支持两个grid之间的数据互相拖拽,我想实现多个grid间的数据互相拖拽,请问高手怎么实现? 解决方案 /*! * Ext JS Library 3.3.0 * Copyright(c) 2006-2010 Ext JS, Inc. * licensing@extjs.com * http://www.extjs.com/license */Ext.onReady(function(){ var myData = {records : [{ name : "Rec

ExtJS5学习之MVVC

      MVVC模式并不是ExtJS首先提出的,其实ExtJS也是模仿微软的WPF中应用的MVVC设计模式.ExtJS在4.0时引入了MVC模式,在5.0时代又引入了MVVC模式.MVC模式对于大家来说应该不陌生了,MVVC是什么?要理解MVVC还是必须先了解MVC是什么?先来张MVC的结构图感受下:  MVC是一种用来更好组织架构软件的设计模式,它把应用程序划分为3部分,各部分各司其责.     Model:是用来表示应用程序中需要用到的数据,当然Model层中也可以包含业务逻辑和数据验证

[ExtJS5学习笔记]第四节 欢迎来到extjs5-手把手教你实现你的第一个应用

本文作者:sushengmiyan ------------------------------------------------------------------------------------------------------------------- 翻译来源:http://docs.sencha.com/extjs/5.0.0/getting_started/welcome_to_extjs.html --------------------------------------

GRID拖拽行的实例代码

这篇文章介绍了GRID拖拽行的实例代码,有需要的朋友可以参考一下   ---------------------GRID拖拽行的实例代码  单行拖拽--------------------------------------- 复制代码 代码如下: //创建第一个GRID var firstGrid = new Ext.grid.GridPanel({ ddGroup : 'secondGridDdGroup',//这里是第二个GRID的ddGroup store       : firstGr