2010-09-07 3 views
1

J'ai beaucoup travaillé avec JQGrid et je le recommanderais à tout le monde. La caractéristique que je n'aime pas vraiment est le multiselect intégré qui n'utilise pas de touches spéciales comme shift et Ctrl, ne donne pas beaucoup de contrôle et force les cases à cocher à afficher.JQGrid onselectrow events - custom multiselect

Je voudrais implémenter mon propre multisélect comme suit: Dans onSelectRow- vérifier si shift ou ctrl est maintenu, ajouter l'identifiant de ligne à un tableau et le sélectionner dans la grille. Si aucun n'est détenu, effacez le tableau et ajoutez le nouvel identifiant de ligne et sélectionnez-le dans la grille.

Ceci est assez simple à mettre en œuvre, sauf J'ai besoin d'un événement dans le onSelectRow pour vérifier si les clés sont maintenues. Je préférerais ne pas attacher un événement keydown et keyup sur le document principal lui-même.

onSelectRow: function (id) { 
      event=??? 
      if (!event.shiftKey && !event.ctrlKey) { 

      } 
      else { 

      } 
} 

Cordialement, Byron Cobb.

EDIT: Solution -

Après l'entrée de Olegs, je l'ai fait ce qui suit.

  1. Set multiselect: true dans la définition de la grille
  2. caché la colonne de cases à cocher dans gridComplete en réglant $("#myGrid").jqGrid('hideCol', 'cb');
  3. Vérifié pour moi-même touche Ctrl (ne pas utiliser multitouche: « ctrlKey ») avant la sélection et effacer la sélection si aucune touche Ctrl n'est enfoncée.
  4. plus tard en utilisant le tableau de sélection en cas de besoin - var SelectedRows = $("#myGrid").jqGrid('getGridParam', 'selarrrow');

beforeSelectRow: function (rowid, e) { 
      if (!e.ctrlKey) { 
       $("#myGrid").resetSelection(); 
      } 
      return true; 
     }, 

Répondre

2

Since the version 3.5.3 jqGrid soutien événement beforeSelectRow qui a l'événement dont vous avez besoin et qui sera appelé avant onSelectRow.

probablement l'utilisation de multikey option jqGrid et dissimulation de la pseudo-colonne avec le nom "cb"

$("#mygrid").jqGrid('hideCol','cb'); 

(cb - combo-boxes, voir http://www.trirand.com/blog/?page_id=393/help/multiselect-without-checkboxes-1/) vous aidera à mettre en œuvre jqGrid la comportement de la sélection de ligne que vous voulez.

MISE À JOUR: Je suppose que vous savez aussi que $("#mygrid").jqGrid('getGridParam','selarrrow') peut être utilisé pour obtenir le tableau de ids de toutes les lignes sélectionnées, mais pour être sûr que j'insérer les informations aussi.

+0

Merci encore. J'ai ma version fonctionnant dans le beforeSelectRow. Essayer le multiselect par défaut avec multikey: "ctrlKey" appelle seulement onSelectRow si ctrl est maintenu enfoncé - devrait-il effacer le multiselect et commencer une nouvelle sélection? – Bob

+0

Dans mon beforeSelectRow je l'ai mis pour retourner toujours vrai, mais avec multiselect et multi-clés (quand ctrl n'est pas maintenu enfoncé) n'appelle toujours pas onSelectRow – Bob

+0

@Byron Cobb: Félicitations! Il me semble que le comportement que vous avez implémenté pourrait être intéressant pour les autres utilisateurs de jqGrid. Vous pouvez ajouter votre question avec le code pour partager la solution avec d'autres. De plus, vous pouvez le poster aussi sur http://www.trirand.com/blog/?page_id = 393/feature-request/et probablement il fera partie de la prochaine version de jqGrid. – Oleg