主页面 datagrid-dnd.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery EasyUI Demo</title>
<!--<script src='/front/common.js' type='text/javascript' charset='utf-8'></script>-->
<link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="http://www.jeasyui.com/easyui/themes/icon.css">
<script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="http://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
<script src='/front/research/dataset/easyui/datagrid-dnd.js' type='text/javascript' charset='utf-8'></script>
<script src='/front/research/dataset/easyui/datagrid-cellediting.js' type='text/javascript'
charset='utf-8'></script>
<!--<script>-->
<!--var data = {"total":28,"rows":[-->
<!--{"productid":"FI-SW-01","productname":"Koi","unitcost":10.00,"status":"P","listprice":36.50,"attr1":"Large","itemid":"EST-1"},-->
<!--{"productid":"K9-DL-01","productname":"Dalmation","unitcost":12.00,"status":"P","listprice":18.50,"attr1":"Spotted Adult Female","itemid":"EST-10"},-->
<!--{"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":38.50,"attr1":"Venomless","itemid":"EST-11"},-->
<!--{"productid":"RP-SN-01","productname":"Rattlesnake","unitcost":12.00,"status":"P","listprice":26.50,"attr1":"Rattleless","itemid":"EST-12"},-->
<!--{"productid":"RP-LI-02","productname":"Iguana","unitcost":12.00,"status":"P","listprice":35.50,"attr1":"Green Adult","itemid":"EST-13"},-->
<!--{"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":158.50,"attr1":"Tailless","itemid":"EST-14"},-->
<!--{"productid":"FL-DSH-01","productname":"Manx","unitcost":12.00,"status":"P","listprice":83.50,"attr1":"With tail","itemid":"EST-15"},-->
<!--{"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":23.50,"attr1":"Adult Female","itemid":"EST-16"},-->
<!--{"productid":"FL-DLH-02","productname":"Persian","unitcost":12.00,"status":"P","listprice":89.50,"attr1":"Adult Male","itemid":"EST-17"},-->
<!--{"productid":"AV-CB-01","productname":"Amazon Parrot","unitcost":92.00,"status":"P","listprice":63.50,"attr1":"Adult Male","itemid":"EST-18"}-->
<!--]};-->
<!--</script>-->
</head>
<body>
<script type="text/javascript">
$(function () {
$("#dsMetaDataGrid").datagrid({
url: '',
method: 'get',
title: '数据项',
fit: true,
fitColumns: false,
singleSelect: true,
rownumbers: true,
toolbar: [{
iconCls: 'icon-save',
text: '保存',
handler: function () {
saveNewSQ();
}
}],
// pagination: true,
columns: [[
{field: 'id', title: 'ID', hidden: true},
{field: 'dataitemCode', title: '标题'},
{field: 'dataitemName', title: '名称'},
{
field: 'itemDisplay', title: '自定义显示名称', align: "center",
editor: 'textbox'
},
{field: 'dataType', title: '数据类型', align: "center",},
{
field: 'unit', title: '单位', align: "center",
editor: 'textbox'
},
{field: 'isPk', title: '是否主键', align: "center"},
{field: 'isNullable', title: '是否可空', align: "center"},
{
field: 'isDisplay', title: '是否显示', align: "center",
editor: {type: 'checkbox', options: {on: 'Y', off: 'N'}}
},
{
field: 'isFilter', title: '是否过滤条件', align: "center",
editor: {type: 'checkbox', options: {on: 'Y', off: 'N'}}
},
{
field: 'sortRecordCustom', title: '是否支持表头排序', align: "center",
editor: {type: 'checkbox', options: {on: 'Y', off: 'N'}}
}
]],
onLoadSuccess: function (data) {
$(this).datagrid('enableDnd');
}
});
$("#dsMetaDataGrid").datagrid('enableCellEditing').datagrid('gotoCell', {
index: 0,
field: "itemDisplay"
});
});
function saveNewSQ() {
var gridData = $("#dsMetaDataGrid").datagrid("getData");
var rows = gridData["rows"];
var b = true;
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
row.sortSequence = i;
$.ajax({
url: '/core/dsmetadata/',
type: 'put',
data: row,
cache: false,
async: false,
success: function (result, status, xhr) {
if (!result["id"]) {
b = b && false;
}
}
});
}
if (!b) {
$.messager.alert("错误", "保存出错!", "error");
} else {
// $.messager.alert("提示", "保存成功!", "info");
window.location.reload();
}
}
</script>
<table id="dsMetaDataGrid"></table>
</body>
</html>
datagrid-dnd.js
(function($){
$.extend($.fn.datagrid.defaults, {
dropAccept: 'tr.datagrid-row',
dragSelection: false,
onBeforeDrag: function(row){}, // return false to deny drag
onStartDrag: function(row){},
onStopDrag: function(row){},
onDragEnter: function(targetRow, sourceRow){}, // return false to deny drop
onDragOver: function(targetRow, sourceRow){}, // return false to deny drop
onDragLeave: function(targetRow, sourceRow){},
onBeforeDrop: function(targetRow, sourceRow, point){},
onDrop: function(targetRow, sourceRow, point){}, // point:'append','top','bottom'
});
$.extend($.fn.datagrid.methods, {
_appendRows: function(jq, row){
return jq.each(function(){
var dg = $(this);
var rows = $.isArray(row) ? row : [row];
$.map(rows, function(row){
dg.datagrid('appendRow', row).datagrid('enableDnd', dg.datagrid('getRows').length-1);
});
});
},
_insertRows: function(jq, param){
return jq.each(function(){
var dg = $(this);
var index = param.index;
var row = param.row;
var rows = $.isArray(row) ? row : [row];
$.map(rows, function(row, i){
dg.datagrid('insertRow', {
index: (index+i),
row: row
}).datagrid('enableDnd', index+i);
});
});
},
_getRowIndexs: function(jq, row){
var dg = jq;
var rows = $.isArray(row) ? row : [row];
var indexs = $.map(rows, function(row){
return dg.datagrid('getRowIndex', row);
});
return $.grep(indexs, function(index){
if (index >= 0){return true;}
});
},
_deleteRows: function(jq, indexs){
return jq.each(function(){
// sort desc
indexs.sort(function(x,y){
if (parseInt(x)>parseInt(y)){
return -1;
} else {
return 1;
}
});
for(var i=0; i<indexs.length; i++){
$(this).datagrid('deleteRow', indexs[i]);
}
});
},
_setSelections: function(jq){
return jq.each(function(){
var rows = $(this).datagrid('getRows');
for(var i=0; i<rows.length; i++){
if (rows[i]._selected){
$(this).datagrid('selectRow', i);
rows[i]._selected = undefined;
}
}
});
},
clearInsertingFlag: function(jq){
return jq.each(function(){
var opts = $(this).datagrid('options');
if (opts.insertingIndex >= 0){
var tr = opts.finder.getTr(this, opts.insertingIndex);
tr.removeClass('datagrid-row-top datagrid-row-bottom');
opts.insertingIndex = -1;
}
});
}
});
var disabledDroppingRows = [];
function enableDroppable(aa){
$.map(aa, function(row){
$(row).droppable('enable');
});
}
$.extend($.fn.datagrid.methods, {
resetDroppable: function(jq){
return jq.each(function(){
var c = $(this).datagrid('getPanel')[0];
var my = [];
var left = [];
for(var i=0; i<disabledDroppingRows.length; i++){
var t = disabledDroppingRows[i];
var p = $(t).closest('div.datagrid-wrap');
if (p.length && p[0] == c){
my.push(t);
} else {
left.push(t);
}
}
disabledDroppingRows = left;
enableDroppable(my);
});
},
enableDnd: function(jq, index){
if (!$('#datagrid-dnd-style').length){
$('<style id="datagrid-dnd-style">' +
'.datagrid-row-top>td{border-top:1px solid red}' +
'.datagrid-row-bottom>td{border-bottom:1px solid red}' +
'</style>'
).appendTo('body');
}
return jq.each(function(){
var target = this;
var state = $.data(this, 'datagrid');
var dg = $(this);
var opts = state.options;
var draggableOptions = {
disabled: false,
revert: true,
cursor: 'pointer',
proxy: function(source) {
var p = $('<div style="z-index:9999999999999"></div>').appendTo('body');
var draggingRow = getDraggingRow(source);
var rows = $.isArray(draggingRow) ? draggingRow : [draggingRow];
$.map(rows, function(row,i){
var index = dg.datagrid('getRowIndex', row);
var tr1 = opts.finder.getTr(target, index, 'body', 1);
var tr2 = opts.finder.getTr(target, index, 'body', 2);
tr2.clone().removeAttr('id').removeClass('droppable').appendTo(p);
tr1.clone().removeAttr('id').removeClass('droppable').find('td').insertBefore(p.find('tr:eq('+i+') td:first'));
$('<td><span class="tree-dnd-icon tree-dnd-no" style="position:static"> </span></td>').insertBefore(p.find('tr:eq('+i+') td:first'));
});
p.find('td').css('vertical-align','middle');
p.hide();
return p;
},
deltaX: 15,
deltaY: 15,
onBeforeDrag:function(e){
var draggingRow = getDraggingRow(this);
if (opts.onBeforeDrag.call(target, draggingRow) == false){return false;}
if ($(e.target).parent().hasClass('datagrid-cell-check')){return false;}
if (e.which != 1){return false;}
},
onStartDrag: function() {
$(this).draggable('proxy').css({
left: -10000,
top: -10000
});
var draggingRow = getDraggingRow(this);
setValid(draggingRow, false);
state.draggingRow = draggingRow;
opts.onStartDrag.call(target, draggingRow);
},
onDrag: function(e) {
var x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY;
var d = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
if (d>3){ // when drag a little distance, show the proxy object
$(this).draggable('proxy').show();
var tr = opts.finder.getTr(target, parseInt($(this).attr('datagrid-row-index')), 'body');
$.extend(e.data, {
startX: tr.offset().left,
startY: tr.offset().top,
offsetWidth: 0,
offsetHeight: 0
});
}
this.pageY = e.pageY;
},
onEndDrag: function(e){
var dd = $(this).data('draggable').droppables.filter(function(){
var dropObj = $(this);
if (dropObj.droppable('options').disabled){return false;}
if (dropObj.hasClass('datagrid-row') && !dropObj.hasClass('datagrid-row-over')){
return false;
}
var p2 = dropObj.offset();
if (e.pageX > p2.left && e.pageX < p2.left + dropObj.outerWidth()
&& e.pageY > p2.top && e.pageY < p2.top + dropObj.outerHeight()){
return true;
} else {
return false;
}
});
var trs = dd.filter(function(){
return $(this).hasClass('datagrid-row');
});
if (trs.length){
dd = trs;
}
$(this).data('draggable').droppables = dd;
},
onStopDrag:function(){
enableDroppable(disabledDroppingRows);
disabledDroppingRows = [];
setValid(state.draggingRow, true);
opts.onStopDrag.call(target, state.draggingRow);
}
};
var droppableOptions = {
accept: opts.dropAccept,
onDragEnter: function(e, source){
if ($(this).droppable('options').disabled){return;}
var dTarget = getDataGridTarget(this);
var dOpts = $(dTarget).datagrid('options');
var tr = dOpts.finder.getTr(dTarget, null, 'highlight');
var sRow = getDraggingRow(source);
var dRow = getRow(this);
if (tr.length && dRow){
cb();
}
function cb(){
if (opts.onDragEnter.call(target, dRow, sRow) == false){
$(dTarget).datagrid('clearInsertingFlag');
tr.droppable('disable');
tr.each(function(){
disabledDroppingRows.push(this);
});
}
}
},
onDragOver: function(e, source) {
if ($(this).droppable('options').disabled){
return;
}
if ($.inArray(this, disabledDroppingRows) >= 0){
return;
}
var dTarget = getDataGridTarget(this);
var dOpts = $(dTarget).datagrid('options');
var tr = dOpts.finder.getTr(dTarget, null, 'highlight');
if (tr.length){
if (!isValid(tr)){
setProxyFlag(source, false);
return;
}
}
setProxyFlag(source, true);
var sRow = getDraggingRow(source);
var dRow = getRow(this);
if (tr.length){
var pageY = source.pageY;
var top = tr.offset().top;
var bottom = tr.offset().top + tr.outerHeight();
$(dTarget).datagrid('clearInsertingFlag');
dOpts.insertingIndex = tr.attr('datagrid-row-index');
if (pageY > top + (bottom - top) / 2) {
tr.addClass('datagrid-row-bottom');
} else {
tr.addClass('datagrid-row-top');
}
if (dRow){
cb();
}
}
function cb(){
if (opts.onDragOver.call(target, dRow, sRow) == false){
setProxyFlag(source, false);
$(dTarget).datagrid('clearInsertingFlag');
tr.droppable('disable');
tr.each(function(){
disabledDroppingRows.push(this);
});
}
}
},
onDragLeave: function(e, source) {
if ($(this).droppable('options').disabled){
return;
}
setProxyFlag(source, false);
var dTarget = getDataGridTarget(this);
$(dTarget).datagrid('clearInsertingFlag');
var sRow = getDraggingRow(source);
var dRow = getRow(this);
if (dRow){
opts.onDragLeave.call(target, dRow, sRow);
}
},
onDrop: function(e, source) {
if ($(this).droppable('options').disabled){
return;
}
var sTarget = getDataGridTarget(source);
var dTarget = getDataGridTarget(this);
var dOpts = $(dTarget).datagrid('options');
var tr = dOpts.finder.getTr(dTarget, null, 'highlight');
var point = null;
var sRow = getDraggingRow(source);
var dRow = null;
if (tr.length){
if (!isValid(tr)){
return;
}
point = tr.hasClass('datagrid-row-top') ? 'top' : 'bottom';
dRow = getRow(tr);
}
$(dTarget).datagrid('clearInsertingFlag');
if (opts.onBeforeDrop.call(target, dRow, sRow, point) == false){
return;
}
insert.call(this);
opts.onDrop.call(target, dRow, sRow, point);
function insert(){
var destIndex = parseInt(tr.attr('datagrid-row-index'));
if (!point){
var indexs = $(sTarget).datagrid('_getRowIndexs', sRow);
$(dTarget).datagrid('_appendRows', sRow);
$(sTarget).datagrid('_deleteRows', indexs);
$(dTarget).datagrid('_setSelections');
} else if (dTarget != sTarget){
var index = point == 'top' ? destIndex : (destIndex+1);
if (index >= 0){
var indexs = $(sTarget).datagrid('_getRowIndexs', sRow);
$(dTarget).datagrid('_insertRows', {
index: index,
row: sRow
});
$(sTarget).datagrid('_deleteRows', indexs);
$(dTarget).datagrid('_setSelections');
}
} else {
var dg = $(dTarget);
var index = point == 'top' ? destIndex : (destIndex+1);
if (index >= 0){
var indexs = dg.datagrid('_getRowIndexs', sRow);
var destIndex = parseInt(tr.attr('datagrid-row-index'));
var index = point == 'top' ? destIndex : (destIndex+1);
if (index >= 0){
dg.datagrid('_insertRows', {
index: index,
row: sRow
});
for(var i=0; i<indexs.length; i++){
if (indexs[i] > index){
indexs[i] += indexs.length;
}
}
dg.datagrid('_deleteRows', indexs);
dg.datagrid('_setSelections');
}
}
}
}
}
}
if (index != undefined){
var trs = opts.finder.getTr(this, index);
} else {
var trs = opts.finder.getTr(this, 0, 'allbody');
}
trs.draggable(draggableOptions);
trs.droppable(droppableOptions);
setDroppable(target);
function setProxyFlag(source, allowed){
var icon = $(source).draggable('proxy').find('span.tree-dnd-icon');
icon.removeClass('tree-dnd-yes tree-dnd-no').addClass(allowed ? 'tree-dnd-yes' : 'tree-dnd-no');
}
function getRow(tr){
if (!$(tr).hasClass('datagrid-row')){return null}
var target = $(tr).closest('div.datagrid-view').children('table')[0];
var opts = $(target).datagrid('options');
return opts.finder.getRow(target, $(tr));
}
function getDraggingRow(tr){
if (!$(tr).hasClass('datagrid-row')){return null}
var target = getDataGridTarget(tr);
var opts = $(target).datagrid('options');
var rows = $(target).datagrid('getRows');
for(var i=0; i<rows.length; i++){
rows[i]._selected = undefined;
}
if (opts.dragSelection){
if ($(tr).hasClass('datagrid-row-selected')){
var rows = $(target).datagrid('getSelections');
$.map(rows, function(row){
row._selected = true;
});
return rows;
}
}
var row = opts.finder.getRow(target, $(tr));
row._selected = $(tr).hasClass('datagrid-row-selected');
return row;
}
function setDroppable(target){
getDroppableBody(target).droppable(droppableOptions).droppable('enable');
}
function getDataGridTarget(el){
return $(el).closest('div.datagrid-view').children('table')[0];
}
function getDroppableBody(target){
var dc = $(target).data('datagrid').dc;
return dc.view;
}
function isValid(tr){
var opts = $(tr).droppable('options');
if (opts.disabled || opts.accept == 'no-accept'){
return false;
} else {
return true;
}
}
function setValid(rows, valid){
var accept = valid ? opts.dropAccept : 'no-accept';
$.map($.isArray(rows)?rows:[rows], function(row){
var index = $(target).datagrid('getRowIndex', row);
opts.finder.getTr(target, index).droppable({accept:accept});
});
}
});
}
});
})(jQuery);
datagrid-cellediting.js
(function($){
$.extend($.fn.datagrid.defaults, {
clickToEdit: true,
dblclickToEdit: false,
navHandler: {
'37': function(e){
var opts = $(this).datagrid('options');
return navHandler.call(this, e, opts.isRtl?'right':'left');
},
'39': function(e){
var opts = $(this).datagrid('options');
return navHandler.call(this, e, opts.isRtl?'left':'right');
},
'38': function(e){
return navHandler.call(this, e, 'up');
},
'40': function(e){
return navHandler.call(this, e, 'down');
},
'13': function(e){
return enterHandler.call(this, e);
},
'27': function(e){
return escHandler.call(this, e);
},
'8': function(e){
return clearHandler.call(this, e);
},
'46': function(e){
return clearHandler.call(this, e);
},
'keypress': function(e){
if (e.metaKey || e.ctrlKey){
return;
}
var dg = $(this);
var param = dg.datagrid('cell'); // current cell information
if (!param){return;}
var input = dg.datagrid('input', param);
if (!input){
var tmp = $('<span></span>');
tmp.html(String.fromCharCode(e.which));
var c = tmp.text();
tmp.remove();
if (c){
dg.datagrid('editCell', {
index: param.index,
field: param.field,
value: c
});
return false;
}
}
}
},
onBeforeCellEdit: function(index, field){},
onCellEdit: function(index, field, value){
var input = $(this).datagrid('input', {index:index, field:field});
if (input){
if (value != undefined){
input.val(value);
}
}
},
onSelectCell: function(index, field){},
onUnselectCell: function(index, field){}
});
function navHandler(e, dir){
var dg = $(this);
var param = dg.datagrid('cell');
var input = dg.datagrid('input', param);
if (!input){
dg.datagrid('gotoCell', dir);
return false;
}
}
function enterHandler(e){
var dg = $(this);
var cell = dg.datagrid('cell');
if (!cell){return;}
var input = dg.datagrid('input', cell);
if (input){
if (input[0].tagName.toLowerCase() == 'textarea'){
return;
}
endCellEdit(this, true);
} else {
dg.datagrid('editCell', cell);
}
return false;
}
function escHandler(e){
endCellEdit(this, false);
return false;
}
function clearHandler(e){
var dg = $(this);
var param = dg.datagrid('cell');
if (!param){return;}
var input = dg.datagrid('input', param);
if (!input){
dg.datagrid('editCell', {
index: param.index,
field: param.field,
value: ''
});
return false;
}
}
function getCurrCell(target){
var cell = $(target).datagrid('getPanel').find('td.datagrid-row-selected');
if (cell.length){
return {
index: parseInt(cell.closest('tr.datagrid-row').attr('datagrid-row-index')),
field: cell.attr('field')
};
} else {
return null;
}
}
function unselectCell(target, p){
var opts = $(target).datagrid('options');
var cell = opts.finder.getTr(target, p.index).find('td[field="'+p.field+'"]');
cell.removeClass('datagrid-row-selected');
opts.onUnselectCell.call(target, p.index, p.field);
}
function unselectAllCells(target){
var panel = $(target).datagrid('getPanel');
panel.find('td.datagrid-row-selected').removeClass('datagrid-row-selected');
}
function selectCell(target, p){
var opts = $(target).datagrid('options');
if (opts.singleSelect){
unselectAllCells(target);
}
var cell = opts.finder.getTr(target, p.index).find('td[field="'+p.field+'"]');
cell.addClass('datagrid-row-selected');
opts.onSelectCell.call(target, p.index, p.field);
}
function getSelectedCells(target){
var cells = [];
var panel = $(target).datagrid('getPanel');
panel.find('td.datagrid-row-selected').each(function(){
var td = $(this);
cells.push({
index: parseInt(td.closest('tr.datagrid-row').attr('datagrid-row-index')),
field: td.attr('field')
});
});
return cells;
}
function gotoCell(target, p){
var dg = $(target);
var opts = dg.datagrid('options');
var panel = dg.datagrid('getPanel').focus();
var cparam = dg.datagrid('cell');
if (cparam){
var input = dg.datagrid('input', cparam);
if (input){
input.focus();
return;
}
}
if (typeof p == 'object'){
_go(p);
return;
}
var cell = panel.find('td.datagrid-row-selected');
if (!cell){return;}
var fields = dg.datagrid('getColumnFields',true).concat(dg.datagrid('getColumnFields'));
var field = cell.attr('field');
var tr = cell.closest('tr.datagrid-row');
var rowIndex = parseInt(tr.attr('datagrid-row-index'));
var colIndex = $.inArray(field, fields);
if (p == 'up' && rowIndex > 0){
rowIndex--;
} else if (p == 'down'){
if (opts.finder.getRow(target, rowIndex+1)){
rowIndex++;
}
} else if (p == 'left'){
var i = colIndex - 1;
while(i >= 0){
var col = dg.datagrid('getColumnOption', fields[i]);
if (!col.hidden){
colIndex = i;
break;
}
i--;
}
} else if (p == 'right'){
var i = colIndex + 1;
while(i <= fields.length-1){
var col = dg.datagrid('getColumnOption', fields[i]);
if (!col.hidden){
colIndex = i;
break;
}
i++;
}
}
field = fields[colIndex];
_go({index:rowIndex, field:field});
function _go(p){
dg.datagrid('scrollTo', p.index);
unselectAllCells(target);
selectCell(target, p);
var td = opts.finder.getTr(target, p.index, 'body', 2).find('td[field="'+p.field+'"]');
if (td.length){
var body2 = dg.data('datagrid').dc.body2;
var left = td.position().left;
if (left < 0){
body2._scrollLeft(body2._scrollLeft() + left*(opts.isRtl?-1:1));
} else if (left+td._outerWidth()>body2.width()){
body2._scrollLeft(body2._scrollLeft() + (left+td._outerWidth()-body2.width())*(opts.isRtl?-1:1));
}
}
}
}
// end the current cell editing
function endCellEdit(target, accepted){
var dg = $(target);
var cell = dg.datagrid('cell');
if (cell){
var input = dg.datagrid('input', cell);
if (input){
if (accepted){
if (dg.datagrid('validateRow', cell.index)){
dg.datagrid('endEdit', cell.index);
dg.datagrid('gotoCell', cell);
} else {
dg.datagrid('gotoCell', cell);
input.focus();
return false;
}
} else {
dg.datagrid('cancelEdit', cell.index);
dg.datagrid('gotoCell', cell);
}
}
}
return true;
}
function editCell(target, param){
var dg = $(target);
var opts = dg.datagrid('options');
var input = dg.datagrid('input', param);
if (input){
dg.datagrid('gotoCell', param);
input.focus();
return;
}
if (!endCellEdit(target, true)){return;}
if (opts.onBeforeCellEdit.call(target, param.index, param.field) == false){
return;
}
var fields = dg.datagrid('getColumnFields',true).concat(dg.datagrid('getColumnFields'));
$.map(fields, function(field){
var col = dg.datagrid('getColumnOption', field);
col.editor1 = col.editor;
if (field != param.field){
col.editor = null;
}
});
var col = dg.datagrid('getColumnOption', param.field);
if (col.editor){
dg.datagrid('beginEdit', param.index);
var input = dg.datagrid('input', param);
if (input){
dg.datagrid('gotoCell', param);
setTimeout(function(){
input.unbind('.cellediting').bind('keydown.cellediting', function(e){
if (e.keyCode == 13){
return opts.navHandler['13'].call(target, e);
// return false;
}
});
input.focus();
}, 0);
opts.onCellEdit.call(target, param.index, param.field, param.value);
} else {
dg.datagrid('cancelEdit', param.index);
dg.datagrid('gotoCell', param);
}
} else {
dg.datagrid('gotoCell', param);
}
$.map(fields, function(field){
var col = dg.datagrid('getColumnOption', field);
col.editor = col.editor1;
});
}
function enableCellSelecting(target){
var dg = $(target);
var state = dg.data('datagrid');
var panel = dg.datagrid('getPanel');
var opts = state.options;
var dc = state.dc;
panel.attr('tabindex',1).css('outline-style','none').unbind('.cellediting').bind('keydown.cellediting', function(e){
var h = opts.navHandler[e.keyCode];
if (h){
return h.call(target, e);
}
});
dc.body1.add(dc.body2).unbind('.cellediting').bind('click.cellediting', function(e){
var tr = $(e.target).closest('.datagrid-row');
if (tr.length && tr.parent().length){
var td = $(e.target).closest('td[field]', tr);
if (td.length){
var index = parseInt(tr.attr('datagrid-row-index'));
var field = td.attr('field');
var p = {
index: index,
field: field
};
if (opts.singleSelect){
selectCell(target, p);
} else {
if (opts.ctrlSelect){
if (e.ctrlKey){
if (td.hasClass('datagrid-row-selected')){
unselectCell(target, p);
} else {
selectCell(target, p);
}
} else {
unselectAllCells(target);
selectCell(target, p);
}
} else {
if (td.hasClass('datagrid-row-selected')){
unselectCell(target, p);
} else {
selectCell(target, p);
}
}
}
}
}
}).bind('mouseover.cellediting', function(e){
var td = $(e.target).closest('td[field]');
if (td.length){
td.addClass('datagrid-row-over');
td.closest('tr.datagrid-row').removeClass('datagrid-row-over');
}
}).bind('mouseout.cellediting', function(e){
var td = $(e.target).closest('td[field]');
td.removeClass('datagrid-row-over');
});
opts.isRtl = dg.datagrid('getPanel').css('direction').toLowerCase()=='rtl';
opts.OldOnBeforeSelect = opts.onBeforeSelect;
opts.onBeforeSelect = function(){
return false;
};
dg.datagrid('clearSelections');
}
function disableCellSelecting(target){
var dg = $(target);
var state = dg.data('datagrid');
var panel = dg.datagrid('getPanel');
var opts = state.options;
opts.onBeforeSelect = opts.OldOnBeforeSelect || opts.onBeforeSelect;
panel.unbind('.cellediting').find('td.datagrid-row-selected').removeClass('datagrid-row-selected');
var dc = state.dc;
dc.body1.add(dc.body2).unbind('.cellediting');
}
function enableCellEditing(target){
var dg = $(target);
var opts = dg.datagrid('options');
var panel = dg.datagrid('getPanel');
panel.attr('tabindex',1).css('outline-style','none').unbind('.cellediting').bind('keydown.cellediting', function(e){
var h = opts.navHandler[e.keyCode];
if (h){
return h.call(target, e);
}
}).bind('keypress.cellediting', function(e){
return opts.navHandler['keypress'].call(target, e);
});
panel.panel('panel').unbind('.cellediting').bind('keydown.cellediting', function(e){
e.stopPropagation();
}).bind('keypress.cellediting', function(e){
e.stopPropagation();
}).bind('mouseover.cellediting', function(e){
var td = $(e.target).closest('td[field]');
if (td.length){
td.addClass('datagrid-row-over');
td.closest('tr.datagrid-row').removeClass('datagrid-row-over');
}
}).bind('mouseout.cellediting', function(e){
var td = $(e.target).closest('td[field]');
td.removeClass('datagrid-row-over');
});
opts.isRtl = dg.datagrid('getPanel').css('direction').toLowerCase()=='rtl';
opts.oldOnClickCell = opts.onClickCell;
opts.oldOnDblClickCell = opts.onDblClickCell;
opts.onClickCell = function(index, field, value){
if (opts.clickToEdit){
$(this).datagrid('editCell', {index:index,field:field});
} else {
if (endCellEdit(this, true)){
$(this).datagrid('gotoCell', {
index: index,
field: field
});
}
}
opts.oldOnClickCell.call(this, index, field, value);
}
if (opts.dblclickToEdit){
opts.onDblClickCell = function(index, field, value){
$(this).datagrid('editCell', {index:index,field:field});
opts.oldOnDblClickCell.call(this, index, field, value);
}
}
opts.OldOnBeforeSelect = opts.onBeforeSelect;
opts.onBeforeSelect = function(){
return false;
};
dg.datagrid('clearSelections')
}
function disableCellEditing(target){
var dg = $(target);
var panel = dg.datagrid('getPanel');
var opts = dg.datagrid('options');
opts.onClickCell = opts.oldOnClickCell || opts.onClickCell;
opts.onDblClickCell = opts.oldOnDblClickCell || opts.onDblClickCell;
opts.onBeforeSelect = opts.OldOnBeforeSelect || opts.onBeforeSelect;
panel.unbind('.cellediting').find('td.datagrid-row-selected').removeClass('datagrid-row-selected');
panel.panel('panel').unbind('.cellediting');
}
$.extend($.fn.datagrid.methods, {
editCell: function(jq, param){
return jq.each(function(){
editCell(this, param);
});
},
isEditing: function(jq, index){
var opts = $.data(jq[0], 'datagrid').options;
var tr = opts.finder.getTr(jq[0], index);
return tr.length && tr.hasClass('datagrid-row-editing');
},
gotoCell: function(jq, param){
return jq.each(function(){
gotoCell(this, param);
});
},
enableCellEditing: function(jq){
return jq.each(function(){
enableCellEditing(this);
});
},
disableCellEditing: function(jq){
return jq.each(function(){
disableCellEditing(this);
});
},
enableCellSelecting: function(jq){
return jq.each(function(){
enableCellSelecting(this);
});
},
disableCellSelecting: function(jq){
return jq.each(function(){
disableCellSelecting(this);
});
},
input: function(jq, param){
if (!param){return null;}
var ed = jq.datagrid('getEditor', param);
if (ed){
var t = $(ed.target);
if (t.hasClass('textbox-f')){
t = t.textbox('textbox');
}
return t;
} else {
return null;
}
},
cell: function(jq){ // get current cell info {index,field}
return getCurrCell(jq[0]);
},
getSelectedCells: function(jq){
return getSelectedCells(jq[0]);
}
});
})(jQuery);