2009-10-02 7 views
3

J'utilise GridPanel w/CheckboxSelectionModel pour la sélection des articles. En mode d'édition, où certaines options ont déjà été sélectionnées, j'essaie de présélectionner les lignes lors du chargement du formulaire.ExtJs checkboxselectionmodel

... 
store.load(); 
//curSelections is an array containing the some ForeingKey IDs of the selected records. 
... 

for (var i = 0; i < curSelections.length; i++) { 
    console.log('found personel ' + curSelections[i] + ' at ', 
       store.findExact('Id', curSelections[i])); 
    selectedRecords.push(store.findExact('Id', curSelections[i])); 
} 
//everything is fine according to console log. 
checkGrid.getSelectionModel().selectRecords(selectedRecords, true); 
formWin.show(); 

cela ne fonctionne pas.

J'essaie d'appeler "selectRecords" également sur d'autres événements page/formulaire, mais aucun de ces événements ne se déclenche.

grid.addListener('show', 
grid.on('show', 
formWin.on('activate', 
formWin.on('show',.... 

une partie du code de la grille

var sm = new Ext.grid.CheckboxSelectionModel({ 
     singleSelect: false, 
     sortable: false, 
     checkOnly: true 
    }); 
    checkGrid = new Ext.grid.GridPanel({ 
     xtype: 'grid', 
     store: obPersonelStore, 
     loadMask: true, 
     layout: 'fit', 
     height: 120, 
     id: 'grdIsBirimiPersonelListesi', 

     columns: [ 
      sm, 
      { 

Il me manque quelque chose de simple, mais ne sais pas ce qu'il est. Toute sorte d'aide est grandement appréciée.

Répondre

3

Store.findExact renvoie un index numérique. SelectionModel. selectRecords attend un tableau de Enregistrer objets. Avez-vous essayé selectRows à la place? Soit cela, ou utilisez le magasin. getAt pour récupérer les enregistrements par index à transmettre à selectRecords().

+0

bien, pour une raison quelconque, je pensais que selectRecords attendait les index de ligne. Maintenant, la chose amusante est, cela fonctionne, ils sont sélectionnés, mais quand le volet de chargement (image tournante) disparaît, les sélections sont effacées. – hazimdikenli

+0

Vous pouvez essayer de déplacer la logique de sélection dans un gestionnaire pour l'événement store.load pour vous assurer que le chargement du magasin est terminé en premier, par exemple, store.on ('load', function() {// logique de sélection}); –

+0

Merci beaucoup. Il a résolu le problème. :) Vous avez été très utile, merci encore. – hazimdikenli

0

Je ne suis pas sûr à 100% de ce que vous voulez réaliser. Vous avez dit:

Je trouve que les lignes sélectionnées de la liste complète

Voulez-vous dire que vous voulez sélectionner chaque ligne? Dans ce cas, vous pouvez utiliser la méthode selectAll() de CheckboxSelectionModel.

Si vous ne voulez sélectionner que certaines lignes, alors je devrais voir le code que vous utilisez pour obtenir ces lignes en premier lieu, mais il se peut que vous vouliez utiliser selectRecords() plutôt que selectRows().

+0

il a été une faute de frappe, j'ai ajouté plus du code dans le message original. Je n'ajoute pas tout le code, parce que ça n'a pas beaucoup de sens. – hazimdikenli

1

essayer:

var store = new Ext.data.Store({ 
    ... 
}); 
var grid = new Ext.grid.GridPanel({ 
    store: store, 
    ... 
}); 
store.on('load', function() { 
    grid.getSelectionModel().selectFirstRow(); 
}); 
store.load();