2010-07-21 5 views
2

J'ai utilisé le code exemple à Example Code at this linkjqGrid dynamique Sélectionner les données

et j'ai ma grille pour afficher un menu déroulant, sélectionnez construit dynamiquement sur ajouter et modifier. Toutefois, lorsqu'il affiche uniquement les données dans la grille, il affiche l'index déroulant au lieu de ses données associées. Est-il possible d'obtenir que la grille affiche les données associées à l'index au lieu de l'index lui-même.

par exemple. les données sur ma sélection pourraient être "0: Bonjour; 1: Monde"; Le menu déroulant de la fenêtre d'édition/ajout montre Hello et World et a les index corrects pour eux. Si la cellule a une valeur de 1, je m'attendrais à ce qu'elle montre World dans la grille elle-même mais elle en montre 1 à la place.

est ici la ligne elle-même de ma grille:

{ name: 'picklist', index: 'picklist', width: 80, sortable: true, editable: true, 
    edittype: "select", formatter: "select", editrules: { required: true} }, 

Je remplissais le contenu dynamique des données en cas LoadComplete comme suit:

$('#mygrid').setColProp('picklist', { editoptions: { value: picklistdata} }); 

données picklist est une chaîne de « 0: Bonjour; 1: World "paires de valeurs de type.

S'il vous plaît, quelqu'un peut-il offrir de l'aide? Je suis assez nouveau à JQGrids alors s'il vous plaît pourriez-vous également inclure des exemples.

+0

Cette question peut être d'une certaine aide: http://stackoverflow.com/questions/3288521/jqgrid-value-and-text-column –

Répondre

0

Si vous enregistrez dans ids jqGrid des select éléments et que vous voulez montrer les correspondants vous textes devez utiliser formatter:'select' dans le colModel (voir http://www.trirand.com/jqgridwiki/doku.php?id=wiki:predefined_formatter#formatter_type_select) ainsi que le edittype: "select".

L'utilisation de stype: 'select' pourrait également vous intéresser si vous envisagez de prendre en charge la recherche de données.

+0

Merci pour l'information mais j'ai déjà essayé ceci. En fin de compte, j'ai dû reformater mon SQL pour récupérer les données au lieu de l'ID de la cellule. Je pensais qu'une ligne de type select utiliserait l'ID dans la source de données comme un index dans la liste des select mais je suppose que ça ne fonctionne pas comme ça après tout, ou peut-être que c'est un défaut avec les types Select dynamiquement remplis . – EnterpriseMonkey

1

Je sais que vous avez déjà résolu le problème, mais j'ai rencontré le même problème dans mon projet et je voudrais offrir ma solution. D'abord, je déclare un formateur personnalisé pour ma colonne de sélection (dans ce cas, la colonne 'nom d'utilisateur').

$.extend($.fn.fmatter, { 
    selectuser: function(cellvalue, options, rowdata) { 
     var userdata; 
     $.ajax({ 
      url:'dropdowns/json/user', 
      async:false, 
      dataType:'json', 
      cache:true, 
      success: function(data) { 
       userdata = data; 
      } 
     }); 
     return typeof cellvalue != 'undefined' ? userdata[cellvalue] : cellvalue ; 
    } 
}); 

Cette charge formatter le mappage d'identité et l'utilisateur dans ce cas, et renvoie le nom d'utilisateur pour le CellValue particulier. Ensuite, j'ai défini l'option formatter:'selectuser' sur la colonne colModel et cela fonctionne.

Bien sûr, cela fait une demande de json par ligne affichée dans la grille. Je l'ai résolu ce problème en mettant en 10 secondes de caching les en-têtes de mes réponses JSON, comme ceci:

private function set_caching($seconds_to_cache = 10) { 
    $ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT"; 
    header("Expires: $ts"); 
    header("Pragma: cache"); 
    header("Cache-Control: max-age=$seconds_to_cache"); 
} 

Je sais que cette solution n'est pas parfait, mais il était convenable pour mon application. Les accès au cache sont servis instantanément par le navigateur et la grille est fluide. En fin de compte, j'espère que le formateur select intégré sera corrigé pour fonctionner avec les données json.

Questions connexes