2010-03-30 15 views
5

Ich habe ein jqGrid auf einer Seite und Benutzer können auf eine Schaltfläche klicken, um eine neue Zeile hinzuzufügen. Wenn bereits genügend Zeilen auf der Seite vorhanden sind, um den sichtbaren Teil des Rasters zu füllen, wird die neue Zeile hinzugefügt, und eine Bildlaufleiste wird angezeigt. Der Benutzer muss jedoch einen Bildlauf durchführen, um die neue Zeile anzuzeigen.Gibt es eine Möglichkeit, jqGrid nach unten zu verschieben, wenn eine neue Zeile hinzugefügt wird?

Gibt es eine Möglichkeit, dies programmgesteuert zu tun?

Antwort

11

Eine schnelle und einfache Möglichkeit, dies mit dem jqGrid API zu tun ist:

  • Anruf editRow
  • Und dann sofort restoreRow nennen (die den Fokus auf die bearbeitete Zeile gesetzt werden) (weil Sie nicht tun wirklich will, um die Zeile)

Andernfalls sollten Sie in der Lage zu bearbeiten jQuery focus Funktion zu setzen den Fokus auf die Reihe zu verwenden, zum Beispiel: jQuery("#" + row_id).focus() - aber ich habe keine t testete diese Methode, also YMMV.

Eigentlich focus wird nicht scrollen das div. Aber Sie können den folgenden Code zu gewährleisten, verwenden, dass die Gitterrollen, so dass die Zeile mit einer bestimmten id sichtbar ist:

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

Eigentlich möchte ich die Zeile bearbeiten, so dass ich es nur im Bearbeitungsmodus verlassen werde - funktioniert wie ein Charme! – HitLikeAHammer

+0

Danke Justin! Die einzige Änderung, die ich tun sollte, ist .scrollTop ((rowHeight * index) -rowHeight), um die Zielzeile sichtbar zu machen. Grüße. – 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(); 
Verwandte Themen