A nova rede de dados do 4D Ajax Framework v11.1 tem capacidade de arrastar e soltar integrada. Este exemplo mostra como ativar, arrastar e soltar entre dois objetos de rede de dados. Mostra 3 formas diferentes de arrastar e soltar.
Para ativar a opção arrastável em uma rede de dados, o comando setDragCells deve executar-se no objeto rede. Este comando também deve executar-se depois a construção do objeto rede (dragGrid.go();)
Sintaxes: dragGrid.setDragCells(row, column, isDroppable);
Para a ativação da opção Droppable em uma rede de dados, o evento "ondragrelease" deve ativar-se para o objeto rede. Este evento permite ao desenvolvedor determinar a resposta específica quando um objeto solta-se em uma cela. Para ativar este evento, deve definir uma função javascript para o evento.
Sintaxe: dropGrid.ondragrelease = YourFunction;
Neste exemplo, definimos o nome da função que responderá ao evento ondragrelease como "onDragReleaseEvent". Aqui está a chamada que se realiza no exemplo:
dropGrid.ondragrelease = onDragReleaseEvent;
A função que responderá à ondragrelease e receberá 2 parâmetros de entrada. Em este exemplo, a função chamada onDragReleaseEvent se vê assim:
function onDragReleaseEvent(cellRef, event) {
// Fazer algo aqui
}
Para oferecer um indicador visual de que uma cela está sendo arrastada, o evento "ondragover" ativa-se para o objeto rede. Este evento permite ao desenvolvedor determinar uma resposta específica quando um objeto arrasta-se sobre uma cela. Para ativar este evento, deve definir-se uma função javascript para o evento.
Sintaxe: dropGrid.ondragover = YourFunction;
Neste exemplo, definimos o nome da função que responderá ao evento ondragrelease como "onDragOverEvent". Está é a chamada que se realiza no exemplo:
dropGrid.ondragover = onDragOverEvent;
Ao igual que o evento ondragrelease, a função que responderá a ondragrelease e receberá 2 parâmetros de entrada. Neste exemplo, a função chamada onDragOverEvent se vê desta forma:
function onDragOverEvent(cellRef, event) {
// Hacer algo acá
}
Em todo o exemplo o evento ondragover utiliza-se para mudar temporalmente a cor do fundo da cela arrastada. Faz-se facilmente devolvendo o nome de um estilo css como resultado.
function onDragOverEvent(cellRef, event) {
return 'dragdrop_style';
}
Nota: O primeiro parâmetro "cellRef" é a referência da cela que se solta. Para obter a referência da cela do objeto cela (cell) que se arrasta, pode chamar
originCell = dax_bridge.hoverDragging.dragObjectSource;
Exemplo 1: Arrastar e soltar simples
Quando ondragrelease dispara a função onDragReleaseEvent, chama a outra função chamada doexample1 com a sua referência de cela soltada passa o parâmetro.
function doexample1(cellRef){
var originCell = dax_bridge.hoverDragging.dragObjectSource;
var srcvalue = originCell.value;
dropGrid.setCellValue(cellRef.row, cellRef.column, srcvalue);
}
Uma vez soltada a cela, simplesmente recuperamos o valor da cela arrastada e atribuímos o valor da cela soltada com o comando setCellValue.
Exemplo 2: Arrastar e soltar como lista (permitir inserção)
Quando ondragrelease dispara a função onDragReleaseEvent, chama a outra função chamada doexample2 com a sua referência de cela soltada passa o parâmetro.
function doexample2(cellRef){
var originCell = dax_bridge.hoverDragging.dragObjectSource;
var srcvalue = originCell.value;
if(cellRef.row < dropcount){
var relocatevalue = '';
for(var i=dropcount; i>=cellRef.row; i--){
relocatevalue = dropGrid.getCellValue(i, cellRef.column);
dropGrid.setCellValue(i+1, cellRef.column, relocatevalue);
}
dropGrid.setCellValue(cellRef.row, cellRef.column, srcvalue);
}else{
dropGrid.setCellValue(dropcount, cellRef.column, srcvalue);
}
}
Por cada evento soltado, uma variável dropcount incrementa-se em 1. Utiliza-se para manter um registro do número total de elementos soltados. Quando uma posição soltada é menor ou igual à dropcount, os valores na fila soltada ou abaixo se aumentarão em um. O valor da posição soltada logo irá inserir-se com o valor da cela arrastada.
Exemplo 3: Arrastar e soltar como lista (efeito, cortar e colar)
Quando ondragrelease dispara a função onDragReleaseEvent, chama a outra função chamada doexample3 com a sua referência de cela soltada para o parâmetro.
function doexample3(cellRef){
var originCell = dax_bridge.hoverDragging.dragObjectSource;
var srcvalue = originCell.value;
if(cellRef.row < dropcount){
var relocatevalue = '';
for(var i=dropcount; i>=cellRef.row; i--){
relocatevalue = dropGrid.getCellValue(i, cellRef.column);
dropGrid.setCellValue(i+1, cellRef.column, relocatevalue);
}
dropGrid.setCellValue(cellRef.row, cellRef.column, srcvalue);
}else{
dropGrid.setCellValue(dropcount, cellRef.column, srcvalue);
}
// Eliminar o elemento soltar da lista original
var rownum = dragGrid.getParsedDataRecordCount();
for(var i=originCell.row; i<=rownum; i++){
relocatevalue = dragGrid.getCellValue(i+1, originCell.column);
dragGrid.setCellValue(i, originCell.column, relocatevalue);
}
}
Este exemplo é igual ao exemplo 2, com a exceção de que a cela que tem sido arrastada elimina-se automaticamente da rede.