Carico una griglia con una richiesta di database (in PHP con CodeIgniter abd jqgrid helper). Non ho alcun problema a mostrare una bella griglia con i miei dati.Crea colonna come casella di controllo
Desidero visualizzare una nuova finestra con caselle di controllo per scegliere una o più righe.
È impossibile aggiungere una nuova colonna dopo il caricamento. Quindi provo a fare così: - La colonna viene aggiunta durante la creazione della griglia, - Durante la creazione, aggiungo un'opzione 'loadComplete' con una funzione, - A diplaying, la funzione viene eseguita. Eccolo:
function ajoutCheckBox() {
var grille = $("#users_grid");
// Construire les checkbox dans la colonne D
grille.setColProp('Dest', {editable: true});
grille.setColProp('Dest', {edittype: 'checkbox'});
grille.setColProp('Dest', {editoptions: { value: "True:False" }});
grille.setColProp('Dest', {formatter: "checkbox"});
grille.setColProp('Dest', {formatoptions: { disabled: true}});
// Insérer la valeur false dans toutes les lignes de la colonne D
var index = grille.jqGrid('getGridParam', '_index');
for(i in index) {
grille.jqGrid('setCell', i, 'Dest', 'False', {});
}
}
Come si può vedere, il gris si chiama "#users_grid" e la colonna "Dest".
Il mio problema: niente aggiunge ...
Grazie per il vostro aiuto!
XB
EDIT: ho trovato la seguente soluzione:
- si aggiunge Colonna di caselle di controllo nella dichiarazione colModel,
- Per inizializzare il valore e attivare le caselle di controllo (sono disabilitato alla creazione!), utilizzo una funzione di callback
"loadComplete"
.
Il codice è molto semplice ma difficile per me trovare ...
La creazione della griglia:
loadComplete: function() { ajoutCheckBox() },
colModel:[.... {"name":"Env","index":"Env","width":30,"hidden":false,"align":"left","edittype":"checkbox","formatter":"checkbox","formatoptions":"{ disabled: false}","editable":true,"editoptions":{"editoptions":"{ value: \"True:False\", defaultValue: \"False\" }}","size":10}}, ....]
La funzione di callback:
function ajoutCheckBox() {
var grille = $("#users_grid");
var index = grille.jqGrid('getGridParam', '_index');
for(i in index) { // Pour toutes les lignes du tableau
grille.jqGrid('setCell', i, 'Env', 'False');
$('#'+i).find("input:checkbox").removeAttr('disabled');
}
}
non lo fa sembra essere ottimizzato ma funziona!
Rhank voi per la vostra risposta! –
Grazie per la risposta! Penso che accetterò il tuo suggerimento, aggirare la tua idea. Mi sono reso conto di aver dimenticato l'opzione 'loadonce: true': permette di caricare immediatamente tutte le proprietà dell'oggetto griglia (forse ho sbagliato ...). Questa opzione mi dà tutto ciò che mi serve per aggiornare righe o colonne. –
@ Albiréo: prego! Se dovessi avere problemi di implementazione potresti aggiungere il tuo codice attuale al testo della tua domanda. Se scrivi un piccolo commento alla mia risposta sui cambiamenti nel testo della tua domanda, potrei rileggerlo e cercherò di aiutarti. – Oleg