2010-03-30 13 views
5

Tengo una jqGrid en una página y los usuarios pueden hacer clic en un botón para agregar una nueva fila. Si ya hay suficientes filas en la página para llenar la porción visible de la cuadrícula, se agrega la nueva fila y aparece una barra de desplazamiento, pero el usuario necesita desplazarse para ver la nueva fila.¿Hay alguna manera de hacer que jqGrid se desplace hasta la parte inferior cuando se agrega una nueva fila?

¿Hay alguna manera de hacer esto programáticamente?

Respuesta

11

Una forma rápida y fácil de hacer esto mediante la API jqGrid es:

  • llamada editRow (que establecer el foco en la fila editado)
  • Y a continuación, llamar inmediatamente restoreRow (porque no lo hace realmente quiere editar la fila)

lo contrario, debe ser capaz de utilizar la función de jQuery focus para ajustar el enfoque de la fila, por ejemplo: jQuery("#" + row_id).focus() - pero no tengo t probado este método, por lo que YMMV.

En realidad focus no se desplazará por la div de la grilla. Sin embargo, se puede utilizar el siguiente código para garantizar que los rollos de la red de tal manera que la fila con un determinado id es visible:

function getGridRowHeight (targetGrid) { 
    var height = null; // Default 

    try{ 
     height = jQuery(targetGrid).find('tbody').find('tr:first').outerHeight(); 
    } 
    catch(e){ 
    //catch and just suppress error 
    } 

    return height; 
} 

function scrollToRow (targetGrid, id) { 
    var rowHeight = getGridRowHeight(targetGrid) || 23; // Default height 
    var index = jQuery(targetGrid).getInd(id); 
    jQuery(targetGrid).closest(".ui-jqgrid-bdiv").scrollTop(rowHeight * index); 
} 
+0

En realidad, sí quiero editar la fila, así que simplemente lo dejo en modo edición; ¡funciona como un amuleto! – HitLikeAHammer

+0

Gracias Justin! la única modificación que debo hacer es .scrollTop ((rowHeight * index) -rowHeight) para hacer visible la fila de destino. Saludos. – nerdcoder

-1
//i. Set newly added row (with id = newRowId) as the currently selected row 
$('#myGrid').jqGrid('setSelection', newRowId); 
//ii. Set focus on the currently selected row 
$("#" + $('#myGrid').jqGrid('getGridParam', 'selrow')).focus(); 
Cuestiones relacionadas