Problems dragging from DataView to GridPanel...
January 5th, 2009Ext.namespace("Ext.cl", "Ext.cl.dd");
Ext.cl.dd.DragZone = function(view, config){
this.view = view;
Ext.cl.dd.DragZone.superclass.constructor.call(thi s, view.getEl(), config);
};
Ext.extend(Ext.cl.dd.DragZone, Ext.dd.DragZone, {
getDragData : function(e){
return {
ddel: e.getTarget()
};
}
});
Ext.onReady(function() {
var gStore = new Ext.data.JsonStore({
fields : [ 'n' ],
data : [
{ n : 'Name 1' }, { n : 'Name 2' }, { n : 'Name 3' }, { n : 'Name 4'}, { n : 'Name 5' },
{ n : 'Name 6' }, { n : 'Name 7' }, { n : 'Name 8' }, { n : 'Name 9'}, { n : 'Name 10' }
]
});
var g = new Ext.grid.GridPanel({
title : 'Grid',
region : 'west',
width : 300,
store : gStore,
colModel: new Ext.grid.ColumnModel([{
id : 'name',
header: 'Name',
dataIndex: 'n'
}
])
});
var dv = new Ext.DataView({
store : new Ext.data.JsonStore({
fields : [ 'd' ],
data : [
{ d : 'Drag Me 1 to grid' }, { d : 'Drag Me 2 to grid' }, { d : 'Drag Me 3 to grid' }
]
}),
tpl : new Ext.XTemplate(
'
'
{d}
','
),
itemSelector : 'h5',
plugins: new Ext.DataView.DragSelector({dragSafe:true})
});
var dp = new Ext.Panel({
title : 'Data View',
region : 'center',
layout : 'fit',
items : dv
});
var main = new Ext.Panel({
title : 'Drag and Drop',
layout : 'border',
items : [ g, dp ],
height : 800,
width : 1000,
renderTo : 'workspace-content'
});
main.render();
var dragZone = new Ext.cl.dd.DragZone(dv, {
containerScroll:true,
ddGroup: 'myDD'}
);
var dropZone = new Ext.dd.DropZone(g.getEl(), {
ddGroup: 'myDD',
onNodeDrop : function(n, dd, e, data){
console.log('onNodeDrop');
return true;
},
notifyDrop : function(dd, e, data) {
console.log('notifyDrop');
return true;
}
});
});
I see in the examples that I need to register the elements that will be DropZone nodes with the Ext.dd.Registry so I added a viewConfig with listeners to register the rows but it didn't seem to help:
viewConfig : {
listeners : {
refresh : function (v) {
var i = 0;
var r = v.getRow(i++);
while (r) {
Ext.dd.Registry.register(r);
r = v.getRow(i++);
}
},
rowremoved : function (v, n, r) {
Ext.dd.Registry.unregister(v.getRow(n));
},
rowsinserted : function (v, fn, ln) {
for (var i = fn; i <= ln; i++) {
Ext.dd.Registry.register(v.getRow(i));
}
}
}
},
Hopefully it's something easy that I'm missing. Thanks in advance for any help.
c. loki
grid 1 -> D&D -> grid 2
Thank you.
thanks,
c. loki
/*
* Ext JS Library 2.0
* (c) 2006-2007, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
Ext.onReady(function(){
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());
Ext.QuickTips.init();
var myData = [
['3m Co',71.72,0.02,0.03,'9/1 12:00am'],
['Alcoa Inc',29.01,0.42,1.47,'9/1 12:00am'],
['Altria Group Inc',83.81,0.28,0.34,'9/1 12:00am'],
['American Express Company',52.55,0.01,0.02,'9/1 12:00am'],
['American International Group, Inc.',64.13,0.31,0.49,'9/1 12:00am'],
['AT&T Inc.',31.61,-0.48,-1.54,'9/1 12:00am'],
['Boeing Co.',75.43,0.53,0.71,'9/1 12:00am'],
['Caterpillar Inc.',67.27,0.92,1.39,'9/1 12:00am'],
['Citigroup, Inc.',49.37,0.02,0.04,'9/1 12:00am'],
['E.I. du Pont de Nemours and Company',40.48,0.51,1.28,'9/1 12:00am'],
['Exxon Mobil Corp',68.1,-0.43,-0.64,'9/1 12:00am'],
['General Electric Company',34.14,-0.08,-0.23,'9/1 12:00am'],
['General Motors Corporation',30.27,1.09,3.74,'9/1 12:00am'],
['Hewlett-Packard Co.',36.53,-0.03,-0.08,'9/1 12:00am'],
['Honeywell Intl Inc',38.77,0.05,0.13,'9/1 12:00am'],
['Intel Corporation',19.88,0.31,1.58,'9/1 12:00am'],
['International Business Machines',81.41,0.44,0.54,'9/1 12:00am'],
['Johnson & Johnson',64.72,0.06,0.09,'9/1 12:00am'],
['JP Morgan & Chase & Co',45.73,0.07,0.15,'9/1 12:00am'],
['McDonald's Corporation',36.76,0.86,2.40,'9/1 12:00am'],
['Merck & Co., Inc.',40.96,0.41,1.01,'9/1 12:00am'],
['Microsoft Corporation',25.84,0.14,0.54,'9/1 12:00am'],
['Pfizer Inc',27.96,0.4,1.45,'9/1 12:00am'],
['The Coca-Cola Company',45.07,0.26,0.58,'9/1 12:00am'],
['The Home Depot, Inc.',34.64,0.35,1.02,'9/1 12:00am'],
['The Procter & Gamble Company',61.91,0.01,0.02,'9/1 12:00am'],
['United Technologies Corporation',63.26,0.55,0.88,'9/1 12:00am'],
['Verizon Communications',35.57,0.39,1.11,'9/1 12:00am'],
['Wal-Mart Stores, Inc.',45.45,0.73,1.63,'9/1 12:00am']
];
// example of custom renderer function
function change(val){
if(val > 0){
return '' + val + '';
}else if(val < 0){
return '' + val + '';
}
return val;
}
// example of custom renderer function
function pctChange(val){
if(val > 0){
return '' + val + '%';
}else if(val < 0){
return '' + val + '%';
}
return val;
}
// create the data store
var dsRelac1 = new Ext.data.SimpleStore({
fields: [
{name: 'company'},
{name: 'price', type: 'float'},
{name: 'change', type: 'float'},
{name: 'pctChange', type: 'float'},
{name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}
]
});
dsRelac1.loadData(myData);
// Modo de seleção (checkboxes)
var sm1 = new Ext.grid.CheckboxSelectionModel();
// create the Grid
var gridRelac1 = new Ext.grid.GridPanel({
el: 'grid-example',
store: dsRelac1,
sm: sm1,
columns: [
sm1,
{id:'company',header: "Company", width: 160, sortable: true, dataIndex: 'company'},
{header: "Price", width: 75, sortable: true, renderer: 'usMoney', dataIndex: 'price'},
{header: "Change", width: 75, sortable: true, renderer: change, dataIndex: 'change'},
{header: "% Change", width: 75, sortable: true, renderer: pctChange, dataIndex: 'pctChange'},
{header: "Last Updated", width: 85, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
],
stripeRows: true,
autoExpandColumn: 'company',
height:350,
width:600,
// enable drag and Drop
enableDragDrop: true,
dropConfig: {
appendOnly:true
},
ddGroup: "GridDD",
title:'Array Grid'
});
//gridRelac1.render();
//gridRelac1.getSelectionModel().selectFirstRow();
// -------------------------------------------------------------------
var myData2 = ;
// example of custom renderer function
function change(val){
if(val > 0){
return '' + val + '';
}else if(val < 0){
return '' + val + '';
}
return val;
}
// example of custom renderer function
function pctChange(val){
if(val > 0){
return '' + val + '%';
}else if(val < 0){
return '' + val + '%';
}
return val;
}
// create the data store
var dsRelac2 = new Ext.data.SimpleStore({
fields: [
{name: 'company'},
{name: 'price', type: 'float'},
{name: 'change', type: 'float'},
{name: 'pctChange', type: 'float'},
{name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'}
]
});
dsRelac2.loadData(myData2);
// Modo de seleção (checkboxes)
var sm2 = new Ext.grid.CheckboxSelectionModel();
// create the Grid
var gridRelac2 = new Ext.grid.GridPanel({
el: 'grid-target',
store: dsRelac2,
sm: sm2,
columns: [
sm2,
{id:'company',header: "Company", width: 160, sortable: true, dataIndex: 'company'},
{header: "Price", width: 75, sortable: true, renderer: 'usMoney', dataIndex: 'price'},
{header: "Change", width: 75, sortable: true, renderer: change, dataIndex: 'change'},
{header: "% Change", width: 75, sortable: true, renderer: pctChange, dataIndex: 'pctChange'},
{header: "Last Updated", width: 85, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
],
stripeRows: true,
autoExpandColumn: 'company',
height:350,
width:600,
ddGroup: "GridDD",
title:'Target Grid'
});
//gridRelac2.render();
//gridRelac2.getSelectionModel().selectFirstRow();
// tabs for the center
var tabs = new Ext.TabPanel({
region: 'center',
margins:'3 3 3 0',
activeTab: 0,
defaults:{autoScroll:true},
items:[{
title: 'Bogus Tab',
layout: 'form',
items: [gridRelac1,gridRelac2]
}]
});
// Panel for the west
var nav = new Ext.Panel({
title: 'Navigation',
region: 'west',
split: true,
width: 200,
collapsible: true,
margins:'3 0 3 3',
cmargins:'3 3 3 3'
});
var win = new Ext.Window({
title: 'Layout Window',
closable:true,
width:600,
height:350,
//border:false,
plain:true,
layout: 'border',
items: [nav, tabs]
});
win.show();
// ----------------------------------------------------------
// Grid 1 -> Grid 2
//this is a grid DragDrop
var ddrow = new Ext.dd.DropTarget(gridRelac2.getEl(), {
ddGroup: "GridDD",
copy:false,
notifyDrop : function(dd, e, data){
var sm = gridRelac1.getSelectionModel();
var rows = sm.getSelections();
var cindex = dd.getDragData(e).rowIndex;
for(i = 0; i < rows.length; i++) {
rowData = dsRelac1.getById(rows[i].id);
if(!this.copy)
dsRelac1.remove(dsRelac1.getById(rows[i].id));
dsRelac2.insert(cindex,rowData);
};
gridRelac2.getView().refresh();
dsRelac2.sort('company', 'asc');
}
});
var ddGrid = new Ext.grid.GridDragZone(gridRelac1, {
containerScroll: true,
ddGroup: "GridDD"
});
// ----------------------------------------------------------
// Grid 2 -> Grid 1
//this is a grid DragDrop
var ddrowTarget = new Ext.dd.DropTarget(gridRelac1.getEl(), {
ddGroup: "GridDD",
copy:false,
notifyDrop : function(dd, e, data){
var sm = gridRelac2.getSelectionModel();
var rows = sm.getSelections();
var cindex = dd.getDragData(e).rowIndex;
for(i = 0; i < rows.length; i++) {
rowData = dsRelac2.getById(rows[i].id);
if(!this.copy)
dsRelac2.remove(dsRelac2.getById(rows[i].id));
dsRelac1.insert(cindex,rowData);
};
gridRelac1.getView().refresh();
dsRelac1.sort('company', 'asc');
}
});
var ddGridTarget = new Ext.grid.GridDragZone(gridRelac2, {
containerScroll: true,
ddGroup: "GridDD"
});
});
#If you have any other info about this subject , Please add it free.# |