• Ext 实现grid之间的拖放(D&D between 2 grids) 【转】


    Ext 提供了丰富的界面效果,其一便是拖动。我试着实现两个grid间的拖动。效果不错。

    原理很简单,就是两个gird都设置支持拖拽的属性: enableDragDrop: true,   dropConfig: { appendOnly:true },  ddGroup: "GridDD2"

    然后 new Ext.dd.DropTarget ,在其notifyDrop里面写拖动的处理函数。

    话不多说,上代码!

    HTML:

    <html>
    <head>
    <title>dd 2 grids</title>

            
    <link rel="stylesheet" type="text/css" href="ext-2.0.2/resources/css/ext-all.css" /> 
            
    <script type="text/javascript" src="ext-2.0.2/adapter/ext/ext-base.js"></script> 
            
    <script type="text/javascript" src="ext-2.0.2/ext-all-debug.js"></script>
            
    <script type="text/javascript" src="mydd2grids.js"></script>
    </head>
    <body>
    <div id="grid1-example"></div>
    <div id="grid2-example"></div>
    </body>
    </html>

    JAVASCRIPT(mydd2grids.js):

    /*
     *  by Patrickchen 2008
     
    */

    Ext.onReady(
    function(){

        Ext.state.Manager.setProvider(
    new Ext.state.CookieProvider());

        
    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']
        ];

        
    // example of custom renderer function
        function change(val){
            
    if(val > 0){
                
    return '<span style="color:green;">' + val + '</span>';
            }
    else if(val < 0){
                
    return '<span style="color:red;">' + val + '</span>';
            }
            
    return val;
        }

        
    // example of custom renderer function
        function pctChange(val){
            
    if(val > 0){
                
    return '<span style="color:green;">' + val + '%</span>';
            }
    else if(val < 0){
                
    return '<span style="color:red;">' + val + '%</span>';
            }
            
    return val;
        }

        
    // create the data store
        var store = 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'}
            ]
        });
        store.loadData(myData);

        
    // create the Grid
        var grid1 = new Ext.grid.GridPanel({
            store: store,
            columns: [
                {id:
    'company',header: "Company",  160, sortable: true, dataIndex: 'company'},
                {header: 
    "Price",  75, sortable: true, renderer: 'usMoney', dataIndex: 'price'},
                {header: 
    "Change",  75, sortable: true, renderer: change, dataIndex: 'change'},
                {header: 
    "% Change",  75, sortable: true, renderer: pctChange, dataIndex: 'pctChange'},
                {header: 
    "Last Updated",  85, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
            ],
            stripeRows: 
    true,
            autoExpandColumn: 
    'company',
            height:
    350,
            
    600,
            title:
    'Array Grid1',
            
    //most important as follow
            enableDragDrop: true,
            dropConfig: {
                appendOnly:
    true
            },
            ddGroup: 
    "GridDD"
        });

        grid1.render(
    'grid1-example');
        
        
    //grid2 -----
         var myData2 = [
            [
    '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']
        ];
         
    var store2 = 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'}
            ]
        });
        store2.loadData(myData2);
        
         
    var grid2 = new Ext.grid.GridPanel({
            store: store2,
            columns: [
                {id:
    'company',header: "Company",  160, sortable: true, dataIndex: 'company'},
                {header: 
    "Price",  75, sortable: true, renderer: 'usMoney', dataIndex: 'price'},
                {header: 
    "Change",  75, sortable: true, renderer: change, dataIndex: 'change'},
                {header: 
    "% Change",  75, sortable: true, renderer: pctChange, dataIndex: 'pctChange'},
                {header: 
    "Last Updated",  85, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
            ],
            stripeRows: 
    true,
            autoExpandColumn: 
    'company',
            height:
    350,
            
    600,
            title:
    'Array Grid2',
            
    //most important as follow
            enableDragDrop: true,
            dropConfig: {
                appendOnly:
    true
            },
            ddGroup: 
    "GridDD2"
        });

        grid2.render(
    'grid2-example');
        
        
    //grid1->grid2
        //this is a grid DragDrop
        var ddrow = new Ext.dd.DropTarget(grid2.getEl(), {
            ddGroup: 
    "GridDD",  // Data come from
            // copy:true,
            notifyDrop : function(dd, e, data){
                
    var rows=grid1.getSelectionModel().getSelections();
                
    var count = rows.length;
                
    var cindex=dd.getDragData(e).rowIndex;
                
    var array=[];
                
    for(var i=0;i<count;i++){
                    
    var index = cindex+i;
                    array.push(index);
                }
                
                store2.insert(cindex,data.selections); 
    //在grid2中新增拖动列
                grid2.getView().refresh(); 
                grid2.getSelectionModel().selectRows(array); 
    //选中拖动过来的列
            }
        });

    原文地址:http://www.cnblogs.com/patrickchen/archive/2008/10/29/1322025.html

  • 相关阅读:
    poj3411
    2241 排序二叉树
    1004 四子连棋
    Poj1482
    poj2046
    Poj3087
    poj3414
    php使用flock堵塞写入文件和非堵塞写入文件
    HTML样式以及使用
    高效程序猿的狂暴之路
  • 原文地址:https://www.cnblogs.com/myssh/p/1736106.html
Copyright © 2020-2023  润新知