2009-08-18 6 views
10

Je crée un jqgrid avec des colonnes déroulantes et j'utilise l'édition de cellules. J'ai besoin des options du menu déroulant des colonnes pour changer de façon dynamique et je l'ai essayé la mise en œuvre en fixant la colonne à:jqGrid dynamic sélectionnez l'option

{ name: "AccountLookup", index: "AccountLookup", width: 90, editable: true, resizable: true, edittype: "select", formatter: "select" }, 

puis en cas de beforeCellEdit je:

beforeEditCell: function(id, name, val, iRow, iCol) { 
     if(name=='AccountLookup') {    
      var listdata = GetLookupValues(id, name); 
      if (listdata == null) listdata = "1:1";        
      jQuery("#grid").setColProp(name, { editoptions: { value: listdata.toString()} })         
     } 
    }, 

GetLookupValues retourne juste une chaîne au format "1: Un; 2: Deux" etc Cela fonctionne bien mais les options sont remplies un clic derrière - ie je clique sur AccountID dans la ligne 1, et la liste déroulante est vide, mais quand je puis cliquez sur AccountID dans la rangée 3 les options que j'ai définies dans la rangée 1 clic sont montrées dans la rangée 3 cliquent. Etc. Alors toujours un clic derrière.

Existe-t-il une autre façon de réaliser ce dont j'ai besoin? Bacally les options de liste déroulante affichées changent toujours et je dois les charger comme l'utilisateur entre dans la cellule pour éditer. Peut-être que je peux en quelque sorte obtenir au contrôle select dans l'événement beforeEditCell et entrer manuellement ses valeurs au lieu d'utiliser l'appel setColProp? Si oui, pourrais-je avoir un exemple de cela s'il vous plaît?

Autre chose: si la liste déroulante est vide et qu'un utilisateur n'annule pas l'édition de cellule, le script de grille renvoie une erreur. J'utilise l'édition clientarray si cela fait une différence.

+0

Encore une chose - l'option getChangedCells de la colonne select renvoie toujours le texte et non la valeur/Id - y at-il un moyen de contourner cela? –

Répondre

4

Vous pouvez utiliser l'option dataInit, comme ceci:

{ name: "AccountLookup", index: "AccountLookup", width: 90, 
    editable: true, resizable: true, edittype: "select", formatter: "select", 
    editoptions: { dataInit: function(elem) 
    { 
     $(elem).empty() 
      .append("<option value='1'>Apples</option>") 
      .append("<option value='2'>Oranges</option>"); 
    } } } 

, remplacez les pommes statiques & options oranges avec votre fonction GetLookupValues ​​().