easyui datagrid 列拖動“含原始碼”
阿新 • • 發佈:2018-11-26
easyui datagrid 列拖動“含原始碼”
苟且,詩與遠方
本文章為秋後的蟲子君原創文章,含原始碼,轉載需註明出處,否則一經發現直接舉報。
1.功能需求
甲方客戶要求easyui datagrid的資料可以左右拖動排列順序,實現列拖動。
大哥啊,這是網頁,不是客戶端啊!!!
沒辦法,甲方才是爸爸!
可是easyui datagrid官方文件裡面又沒有列拖動屬性,那就只能自己重寫一個了。
2.直接看效果圖
拖拽前:
拖拽時:
拖拽後:
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>