2012-02-14 11 views
6

L'utilizzo della griglia comporta l'ordinamento con poche righe in modalità di modifica in linea.Problema con la colonna di ordinamento durante la modifica delle righe inline in jqGrid

Le domande sarebbero:

  1. C'è un modo per eseguire l'ordinamento, mentre la modifica in linea una o più righe?

  2. In caso contrario, c'è un evento che salterà quando scatto le intestazioni delle colonne, mentre la modifica in linea una o più righe? (Un evento in cui posso forse togliere la modifica, prima che l'ordinamento dei contenuti)

Grazie, Catalin

risposta

7

Una domanda interessante! +1 da me.

Il problema con l'ordinamento di modifica di righe o celle consiste nell'accesso al contenuto delle celle di modifica. Il codice corrente di jqGrid non lo fa e così all'interno del gestore di eventi click sulle intestazioni delle colonne ci sono test se ci sono delle righe di modifica nella griglia. Se esistono alcune righe/righe di modifica, l'ordinamento verrà interrotto senza per chiamare il callback onSortCol.

Quindi è possibile solo il secondo modo in cui è possibile salvare o ripristinare le celle di modifica prima di ordinare. Per implementare questo c'è un piccolo problema. Se si uniscono ulteriori eventi click nelle intestazioni delle colonne, si chiamerà dopo il precedente gestore standard associato di jqGrid. Quindi non è possibile salvare o annullare la modifica modificata prima dello l'evento click verrà elaborato. Si può risolvere il problema in due modi: o si può chiamare la funzione sortData dal nuovo gestore di eventi o si dovrebbe cambiare l'ordine delle associazioni per l'evento click. Il codice seguente dimostra il secondo approccio:

$.each($grid[0].grid.headers, function() { 
    var $th = $(this.el), i, l, clickHandler, clickHandlers = [], 
     currentHandlers = $th.data('events'), 
     clickBinding = currentHandlers.click; 

    if ($.isArray(clickBinding)) { 
     for (i = 0, l = clickBinding.length; i < l; i++) { 
      clickHandler = clickBinding[i].handler; 
      clickHandlers.push(clickHandler); 
      $th.unbind('click', clickHandler); 
     } 
    } 
    $th.click(function() { 
     var p = $grid[0].p, savedRow = p.savedRow, j, len = savedRow.length; 
     if (len > 0) { 
      // there are rows in cell editing or inline editing 
      if (p.cellEdit) { 
       // savedRow has the form {id:iRow, ic:iCol, name:nm, v:value} 
       // we can call restoreCell or saveCell 
       //$grid.jqGrid("restoreCell", savedRow[0].id, savedRow[0].ic); 
       $grid.jqGrid("saveCell", savedRow[0].id, savedRow[0].ic); 
      } else { 
       // inline editing 
       for (j = len - 1; j >= 0; j--) { 
        // call restoreRow or saveRow 
        //$grid.jqGrid("restoreRow", savedRow[j].id); 
        $grid.jqGrid("saveRow", savedRow[j].id); 
       } 
      } 
     } 
    }); 
    l = clickHandlers.length; 
    if (l > 0) { 
     for (i = 0; i < l; i++) { 
      $th.bind('click', clickHandlers[i]); 
     } 
    } 
}); 

dove $grid sono definiti come var $grid = $("#list"). Puoi vedere in diretta come funziona su the following demo.

+0

grazie mille, ci provo io –

+0

funziona alla grande. grazie ancora. –

+0

@CatalinFlorea: prego! – Oleg

1

Se si desidera provare l'opzione 2, è possibile collegarsi all'evento onSortCol. Qui è possibile annullare la modalità di modifica di tutte le righe e quindi consentire l'ordinamento da eseguire. Basta essere sicuri di non restituire "stop" o l'ordinamento non avverrà affatto.

Sollevato immediatamente dopo aver fatto clic sulla colonna ordinabile e prima di ordinare i dati.

È possibile ottenere tutta la documentazione here.

+0

Già provato. Non si attiva durante la modifica delle righe della griglia. –

Problemi correlati