2009-11-19 12 views

risposta

1

Il demo per le righe ordinabili jqGrid plug dice che tutte le opzioni disponibili e gli eventi dal widget di ordinabile possono essere utilizzati.

Se è giusto, allora dovresti stare bene usando lo update event che fa parte del plugin ordinabile.

+0

Grazie ... ho pensato che sembrava promettente anche. Tuttavia non riesco ancora a capire come posso impostare un gestore per questo evento. Ho provato ad aggiungere l'aggiornamento : function (event, ui) {alert (""); } quando si inizializza la griglia e anche $ ("elenco #").bind ("sortupdate", function() {alert ("");}); dopo l'inizializzazione della griglia. Ma nessuno dei due lavora per me ... qualche suggerimento? – Adam

2

questo funziona: 'tabella ui-jqGrid-hbox'

[Modificato]

$ (, $ ('#' + gridId) .parents ('ui-jqGrid-view')) .bind ("sortstop", function() {onGridColumnReordered (gridId)})

in cui è necessario passare il gridId e creare tale funzione suGridColumnReordered, ovviamente.

+0

Non ha funzionato per me affatto. Non sembra che ogni evento vincolante avvenga con successo. –

3

Trovato dopo aver letto la risposta di Mr W e sperimentare un po ', c'è un modo migliore di fare le cose:

$("#gbox_" + gridid).bind("sortstop", function(){ 
    // you can even get the current permutation! 
    // Yes, it looks like you may be grabbing the remapColumns function. 
    // You're not, you get an array of integers back. 
    grid.jqGrid("getGridParam", "remapColumns"); 
}) 

Enjoy!

9

C'è una chiamata in grid.jqueryui.js (jqGrid v3.8.2) nell'aggiornamento() per ts.p.sortable.update() come discusso in jqGrid message board, quindi:

jQuery('#gridId').jqGrid({ 
    ..., 
    sortable: { update: function(permutation) { 
     alert('save permutation somewhere'); 
    }, 
    ... 
}); 

Tuttavia , si noti che l'array passato alla richiamata sarà relativo all'ordine di colonne corrente. In altre parole, il salvataggio dell'array come è dopo lo spostamento di più colonne non produrrà i risultati desiderati.

che dovevo fare qualcosa di simile:

var defaultColNames = [ 'Alpha', 'Beta', 'Gamma' ]; 
var defaultColModel = [ 
    { name: 'alpha', index: 'alpha' }, 
    { name: 'beta', index: 'beta' }, 
    { name: 'gamma', index: 'gamma' } 
]; 

jQuery('#gridId').jqGrid({ 
    ..., 
    colNames: defaultColNames, 
    colModel: defaultColModel, 
    sortable: { update: function(relativeColumnOrder) { 
     var grid = jQuery('#gridId'); 

     var defaultColIndicies = []; 
     for(var i=0; i<defaultColModel.length; i++) { 
      defaultColIndicies.push(defaultColModel[i].name); 
     } 

     if(grid.getGridParam('treeGrid')) { 
      // tree grid mode adds 5 extra columns 
      defaultColIndicies = defaultColIndicies.concat(['level','parent','isLeaf','expanded','loaded']); 
     } 

     var columnOrder = []; 
     var currentColModel = grid.getGridParam('colModel'); 
     for(var j=0; j<relativeColumnOrder.length; j++) { 
      columnOrder.push(defaultColIndicies.indexOf(currentColModel[j].name)); 
     } 

     // columnOrder now contains exactly what's necessary to pass to to remapColumns 
     // now save columnOrder somewhere 
     globalColumnOrder = columnOrder; 
    }, 
    ... 
}); 

// grab saved column order from cookie or something 
var globalColumnOrder = [0,1,2]; 

// append to array if tree grid enabled 
if(jQuery('#gridId').getGridParam('treeGrid')) { 
    // tree grid mode adds 5 extra columns 
    for(var k=defaultColNames.length; k<(defaultColNames.length+5); k++) { 
     globalColumnOrder.push(k); 
    } 
} 

// restore column order 
jQuery('#gridId').jqGrid('remapColumns', globalColumnOrder, true, false); 
+0

grazie, l'opzione di aggiornamento della funzione ordinabile ha funzionato per me, combinata con grid.jqGrid ("getGridParam", "remapColumns") come suggerito da groxx che sembrava avere lo stesso ordine di colonna – msanjay

+0

@zishan Sai se c'è un modo per abortire la permutazione di una colonna? – will824

0

Non sarebbe molto più facile. Basta usare l'elemento ui per mappare tutte le righe e trovare la loro posizione usando la funzione index() ordinabile?

stop: function(e, ui) { 
     console.log($.map($(this).find('tr.ui-widget-content'), function(el) { 
      return el.id + ' = ' + $(el).index(); 
     })); 
     } 
0

Il commento data dal @msanjay è il modo migliore di fare questo e qui è il codice che ha lavorato per me.

var globalvar_sortingorder; 

jQuery('#gridId').jqGrid({ 
....... 
    sortable: { update: function(relativeColumnOrder) { 
        var grid = jQuery('#gridId'); 
        var columnOrder=grid.jqGrid("getGridParam", "remapColumns"); 
       // columnOrder now contains exactly what's necessary to pass to to remapColumns 
       // now save columnOrder somewhere 

      globalvar_sortingorder=columnOrder; 

        }} 
.... 
}); 

Per ripristinare l'ordine delle colonne

if(getObjectFromLocalStorage("sortingorder")) {  
jQuery('#gridId').jqGrid('remapColumns', globalvar_sortingorder, true, false);   
} 
0

uso questo

$("#list").navGrid('#pager1', { edit: true, add: true, del: true }); 
Problemi correlati