1. 程式人生 > >easyui datagrid 列拖動“含原始碼”

easyui datagrid 列拖動“含原始碼”

easyui datagrid 列拖動“含原始碼”

苟且,詩與遠方

本文章為秋後的蟲子君原創文章,含原始碼,轉載需註明出處,否則一經發現直接舉報。

1.功能需求

甲方客戶要求easyui datagrid的資料可以左右拖動排列順序,實現列拖動。
大哥啊,這是網頁,不是客戶端啊!!!
沒辦法,甲方才是爸爸!
可是easyui datagrid官方文件裡面又沒有列拖動屬性,那就只能自己重寫一個了。

2.直接看效果圖

拖拽前:
Alt
拖拽時:
Alt
拖拽後:
Alt

3.需要的包

檔案 Value
jquery 建議1.8以上
jquery.easyui.min.js 建議easyui1.5以上
easyui.css 建議easyui1.5以上
tuodong3.js 下面貼出原始碼

4.tuodong3.js程式碼片

  $.extend($.
fn.dialog.methods, { mymove: function(jq, newposition){ return jq.each(function(){ $(this).dialog('move', newposition); }); } }); // $('#dg').dialog('mymove', { // left: 200, // top: 100 //}); $.extend($.fn.datagrid.methods,{ columnMoving:
function(jq){ return jq.each(function(){ var target = this; var cells = $(this).datagrid('getPanel').find('div.datagrid-header td[field]'); cells.draggable({ revert:true, cursor:'pointer', edge:5, proxy:function(source){ var p = $('<div class="tree-node-proxy tree-dnd-no" style="position:absolute;border:1px solid #ff0000"/>').appendTo('body'); p.html($(source).text()); p.hide(); return p; }, onBeforeDrag:function(e){ e.data.startLeft = $(this).offset().left; e.data.startTop = $(this).offset().top; }, onStartDrag: function(){ $(this).draggable('proxy').css({ left:-10000, top:-10000 }); }, onDrag:function(e){ $(this).draggable('proxy').show().css({ left:e.pageX+15, top:e.pageY+15 }); return false; } }).droppable({ accept:'td[field]', onDragOver:function(e,source){ $(source).draggable('proxy').removeClass('tree-dnd-no').addClass('tree-dnd-yes'); $(this).css('border-left','1px solid #ff0000'); }, onDragLeave:function(e,source){ $(source).draggable('proxy').removeClass('tree-dnd-yes').addClass('tree-dnd-no'); $(this).css('border-left',0); }, onDrop:function(e,source){ $(this).css('border-left',0); var fromField = $(source).attr('field'); var toField = $(this).attr('field'); setTimeout(function(){ moveField(fromField,toField); $(target).datagrid(); $(target).datagrid('columnMoving'); },0); } }); // move field to another location function moveField(from,to){ var columns = $(target).datagrid('options').columns; var cc = columns[0]; var c = _remove(from); if (c){ _insert(to,c); } function _remove(field){ for(var i=0; i<cc.length; i++){ if (cc[i].field == field){ var c = cc[i]; cc.splice(i,1); return c; } } return null; } function _insert(field,c){ var newcc = []; for(var i=0; i<cc.length; i++){ if (cc[i].field == field){ newcc.push(c); } newcc.push(cc[i]); } columns[0] = newcc; } //columns[0]是拖動後儲存的順序 //這個是拖動觸發事件 tuodong_ajax(columns[0]); } }); } }); function tuodong_ajax(jilu_string){ //遍歷一下順序,裡面的ck引數是複選框的field,一定要小心 var paixu=""; $.each( jilu_string, function( key, value ){ if(value.field != 'ck'){ paixu+=value.field; if(key < jilu_string.length){ paixu+=","; } } }); //利用ajax將順序儲存返回給後臺 $.ajax({ type: 'POST', url : "/TreeController/tuodong.do", data : { paixu : paixu }, dataType : "json", success : function(result){ } }); }

5.頁面程式碼片(警告:JS最後一行需要修改)

<html>
<head>
  <script type="text/javascript" src="/static/js/jquery_1.8.0.min.js"></script>
  <script type="text/javascript" src="/static/js/jqueryeasyui/jquery.easyui.min.js"></script>
  <link rel="stylesheet" type="text/css" href="/static/js/jqueryeasyui/themes/bootstrap/easyui.css">
   <script type="text/javascript" src="/view/pages2/tuodong3.js"></script>

  <script type="text/javascript">
  
 $(function() {
  	 $("#dg").datagrid({
    			pagination:true,//分頁工具欄
    			url :"/Souli_51_Controller/select.do",
    			idField:"name",//標識欄位
    			fit: true, //自適應大小
    			nowrap: true,//資料長度超出列寬時將會自動擷取。
                rownumbers:true,//行號
               // fitColumns:true,//自動使列適應表格寬度以防止出現水平滾動。
                sortOrder: 'asc',//設定排序規則
                sortName: 'name',//設定預設排序的列
                remoteSort:true,//設定屬性(對本地資料是false,預設為true)
            	pageSize : 20,
            	pageList : [15,20,30,50,100,150,200,250,300],
            	columns : [ [ 
            	           {field : 'ck',checkbox : true}, 
            	           {field : 'name',	title:'姓名',		align:'center',sortable: true,width:50},  
            	           {field : 'account_id',title:'呼叫',align:'center',sortable: true,width:50}, 
            	           {field : 'uuid',	title:'工號',		align:'center',sortable: true,width:50}, 
    				] ],
    		
    			//表頭雙擊事件
    			onDblClickRow: function (index, row) {
    				},
    		}).datagrid("columnMoving");	//這行是開啟新增拖動
    	}); 
    
    </script>

</head>
<body>
<div id="a" class="easyui-layout"  style="width:100%;height:100%;">
    <div data-options="region:'center'">
   		<table id="dg"></table>
	</div>
	<div id="ft" style="height:60px"></div>
</div>
<div id="bfdc_jiazai_div"></div>

</body>
</html>