Draggable Datagrid Columns

Draggable Datagrid Columns

 

擴充方法:

   1: $.extend($.fn.datagrid.methods, {
   2:     columnMoving: function (jq) {
   3:         return jq.each(function () {
   4:             var target = this;
   5:             var cells = $(this).datagrid('getPanel').find('div.datagrid-header td[field]');
   6:             cells.draggable({
   7:                 revert: true,
   8:                 cursor: 'pointer',
   9:                 edge: 5,
  10:                 proxy: function (source) {
  11:                     var p = $('<div class="tree-node-proxy tree-dnd-no" style="position:absolute;border:1px solid #ff0000"/>').appendTo('body');
  12:                     p.html($(source).text());
  13:                     p.hide();
  14:                     return p;
  15:                 },
  16:                 onBeforeDrag: function (e) {
  17:                     e.data.startLeft = $(this).offset().left;
  18:                     e.data.startTop = $(this).offset().top;
  19:                 },
  20:                 onStartDrag: function () {
  21:                     $(this).draggable('proxy').css({
  22:                         left: -10000,
  23:                         top: -10000
  24:                     });
  25:                 },
  26:                 onDrag: function (e) {
  27:                     $(this).draggable('proxy').show().css({
  28:                         left: e.pageX + 15,
  29:                         top: e.pageY + 15
  30:                     });
  31:                     return false;
  32:                 }
  33:             }).droppable({
  34:                 accept: 'td[field]',
  35:                 onDragOver: function (e, source) {
  36:                     $(source).draggable('proxy').removeClass('tree-dnd-no').addClass('tree-dnd-yes');
  37:                     $(this).css('border-left', '1px solid #ff0000');
  38:                 },
  39:                 onDragLeave: function (e, source) {
  40:                     $(source).draggable('proxy').removeClass('tree-dnd-yes').addClass('tree-dnd-no');
  41:                     $(this).css('border-left', 0);
  42:                 },
  43:                 onDrop: function (e, source) {
  44:                     $(this).css('border-left', 0);
  45:                     var fromField = $(source).attr('field');
  46:                     var toField = $(this).attr('field');
  47:                     setTimeout(function () {
  48:                         moveField(fromField, toField);
  49:                         $(target).datagrid();                         
  50:                         $(target).datagrid('columnMoving');
  51:                         $(target).datagrid('loadData', $(target).datagrid('getData'));  //LoadData
  52:                     }, 0);
  53:                 }
  54:             });
  55:  
  56:             // move field to another location
  57:             function moveField(from, to) {
  58:                 var columns = $(target).datagrid('options').columns;
  59:                 var cc = columns[0];
  60:                 var c = _remove(from);
  61:                 if (c) {
  62:                     _insert(to, c);
  63:                 }
  64:  
  65:                 function _remove(field) {
  66:                     for (var i = 0; i < cc.length; i++) {
  67:                         if (cc[i].field == field) {
  68:                             var c = cc[i];
  69:                             cc.splice(i, 1);
  70:                             return c;
  71:                         }
  72:                     }
  73:                     return null;
  74:                 }
  75:                 function _insert(field, c) {
  76:                     var newcc = [];
  77:                     for (var i = 0; i < cc.length; i++) {
  78:                         if (cc[i].field == field) {
  79:                             newcc.push(c);
  80:                         }
  81:                         newcc.push(cc[i]);
  82:                     }
  83:                     columns[0] = newcc;
  84:                 }
  85:             }
  86:         });
  87:     }
  88: });

 

使用方式:

   1: $('#dataList').datagrid('columnMoving');