2010-03-03 7 views
1

J'ai une grille d'éditeur où si une cellule spécifique est mise au point (est en cours d'édition), une fenêtre contenant un panneau d'arbre apparaît permettant à l'utilisateur de choisir un nœud de l'arbre comme nouvelle valeur de la cellule. De cette façon, l'utilisateur ne modifie pas réellement la cellule en question, mais utilise la fenêtre pour choisir la nouvelle valeur. Cependant, j'ai des difficultés à définir la valeur de la cellule en question par programmation.Modifier par programme la valeur d'une cellule EditorGrid

Voici le code que j'utilise pour définir la place de la grille, y compris le modèle de la colonne qui choisit quel éditeur utiliser pour une cellule en fonction du type de valeur:

var editorCM = new Ext.grid.ColumnModel({ 
    //config 
    ,editors : { 
    //rest of editors 
    'id' : new Ext.grid.GridEditor(new Ext.form.TextField({readOnly : true})) 
    } 
    ,getCellEditor : function(col, row) { 
    //choose editor depending on the type value of a cell 
    } 
}) 

var editorGrid = new Ext.grid.EditorGridPanel({ 
    //rest of config 
    ,cm : editorCM 
}) 

Voici mon code pour changer la cellule de valeur une fois que l'utilisateur choisit à partir de l'arbre.

function submitNode(newValue) { 
    var temp = editorGrid.GetSelectionModel().getSelectedCell(); //returns array containing column and row position of selected cell, which value we want to change. 

    //temp[1] = column index, temp[0] = row index 
    //Gets the cell editor at specific position and sets new value for that cell 
    editorGrid.getColumnModel().getCellEditor(temp[1], temp[0]).setValue(newValue); 
} 

J'ai aussi essayé quelques autres moyens (y compris tous setValue (newValue)), mais sont venus les mains vides. J'ai regardé à travers l'API et les forums ExtJS pour trouver des indices, mais je suis également venu les mains vides.

Répondre

1

Je n'ai pas travaillé avec la grille de l'éditeur, donc je vais y aller un peu.

regardant ce titre de référence: http://www.extjs.com/deploy/dev/examples/grid/edit-grid.js

il semble que la façon dont ils l'ont fait (pour ajouter) était de mettre à jour le magasin directement et si vous pouvez identifier l'enregistrement du magasin vous pouvez sûrement le mettre à jour directement.

regard sur le gestionnaire pour addPlant:

handler : function(){ 
      // access the Record constructor through the grid's store 
      var Plant = grid.getStore().recordType; 
      var p = new Plant({ 
       common: 'New Plant 1', 
       light: 'Mostly Shade', 
       price: 0, 
       availDate: (new Date()).clearTime(), 
       indoor: false 
      }); 
      grid.stopEditing(); 
      store.insert(0, p); 
      grid.startEditing(0, 0); 
     } 

défaut, je serais curieux de voir ce qui se passe quand vous faites votre champ non seulement lire:

,editors : { 
//rest of editors 
'id' : new Ext.grid.GridEditor(new Ext.form.TextField({readOnly : false})) } 

seulement quelques pensées.

Questions connexes