2009-05-19 8 views
3

J'ai une colonne de type booléen dans un cfgrid html. Les données sont stockées dans la base de données sous la forme 1/0 et renvoyées par CF en tant que telles. Je veux que l'utilisateur voie Oui/Non au lieu de 1/0. J'ai essayé QuerySetCell, et je n'ai pas réussi à le faire fonctionner.Colonne booléenne cfgrid comme Oui/Non

Le formulaire est modifiable, lorsque vous double-cliquez sur la cellule, les cases à cocher s'affichent et il se met à jour comme il se doit. Le seul problème est l'affichage.

<cfform> 
    <cfgrid name="blah" format="html" bind="mycfccall" selectmode="edit"> 
     <cfgridcolumn name="bitCol" header="Is it" width="75" type="boolean"> 
    </cfgrid> 
</cfform> 

Merci à l'avance ...

Répondre

6

Vous aurez besoin d'appliquer un champ personnalisé renderer. Vous devrez ajouter une fonction init() js à votre page, ainsi qu'une méthode de rendu. Je le processus de base de l'application d'un moteur de rendu personnalisé sur mon blog: méthode

CF8 Ajax Grid: Renderers and Events

Fondamentalement, vous allez appeler votre init() après la grille a d'abord rendu, en utilisant la méthode ajaxOnLoad():

<cfset ajaxOnLoad("init") /> 

au sein de votre méthode init(), vous obtiendrez une référence à la grille et il est ColumnModel:

init = function() { 
    var myGrid = ColdFusion.Grid.getGridObject('myGridID'); 
    var gridCM = myGrid.getColumnModel(); 
    // The rest goes here 
} 

vous aurez également besoin de votre renderer méthode, que vous pouvez appliquer à une colonne:

yesNoRenderer = function(value,meta,record,row,column,store) { 
    if (value === 1){ 
     return "Yes"; 
    } else { 
     return "No"; 
    } 
} 

Après quoi, vous aurez besoin d'appliquer le générateur de la colonne de votre choix:

gridCM.setRenderer(cm.getIndexById('myColumnName'), yesNoRenderer); 

La méthode setRenderer prend l'index de colonne (à partir de 0) et la fonction à appliquer comme moteur de rendu. La méthode getIndexById() devrait fonctionner ici, mais vous devez d'abord le tester pour être sûr, et n'oubliez pas que le boîtier est important dans JavaScript.

La plupart des composants CF Ajax utilisent Ext 1.1 sous le capot. Lisez attentivement la documentation d'Adobe sur le ColdFusion JavaScript Functions, et n'oubliez pas que vous pouvez puiser dans le Ext 1.1 API sous-jacent.

+0

Désolé pour l'ignorance, mais la dernière ligne .. cm.setRenderer ... etc Si tel était gridCM.setRenderer .. le Var créé dans la fonction init? Et, où dois-je placer cette ligne? à l'intérieur de la fonction init? En dehors de toute fonction en particulier? Merci d'avance, c'est déjà une aide géante. –

+0

Vous avez tout à fait raison, setRenderer() fait partie de ColumnModel, et est appelé sur gridCM. Et oui, vous mettriez cela dans la méthode init(). –

1

Je pense que ce sera plus facile à utiliser Decode dans votre requête de base de données:

Decode(bitCol,1,'Yes','No') bitCol