2010-07-14 17 views
9

je peux changer la couleur du texte en faisant cela dans formatter jqGrid personnalisé:Comment puis-je modifier la couleur d'arrière-plan d'une cellule dans un formateur personnalisé jqgrid?

function YNFormatter(cellvalue, options, rowObject) 
{ 
    var color = (cellvalue == "Y") ? "green" : "red"; 
    var cellHtml = "<span style='color:" + color + "' originalValue='" + 
           cellvalue + "'>" + cellvalue + "</span>"; 

    return cellHtml; 
} 

mais je veux changer maintenant la couleur d'arrière-plan de la cellule entière (au lieu de la couleur du texte).

Est-ce possible?

+1

Vérifiez la réponse mise à jour. – simplyharsh

+0

@harshhh - J'ai ajouté un autre commentaire – leora

+0

Vous devriez simplement utiliser ''background-color'' au lieu de'' color'' et définir un style supplémentaire ''background-image': 'none' pour supprimer l'image de fond héritée du Classe d'interface utilisateur jQuery 'ui-widget-content'. Si vous souhaitez également utiliser la couleur standard pour le survol et/ou les lignes sélectionnées, vous pouvez utiliser la technique décrite dans http://stackoverflow.com/questions/4956949/make-selected-color-highest-level-in-jqgrid/4960622# 4960622 – Oleg

Répondre

20

Si vous voulez utiliser l'élément <span> à l'intérieur de la formatter cellulaire personnalisée, vous pouvez retourner dans le formatter personnalisé

return '<span class="cellWithoutBackground" style="background-color:' + 
     color + ';">' + cellvalue + '</span>'; 

où le style de span.cellWithoutBackground vous pouvez définir par exemple comme suit

span.cellWithoutBackground 
{ 
    display:block; 
    background-image:none; 
    margin-right:-2px; 
    margin-left:-2px; 
    height:14px; 
    padding:4px; 
} 

Comment ça marche, vous pouvez voir en direct here: enter image description here

mise à jour: La réponse est ancienne. La meilleure pratique consiste à utiliser le rappel cellattr dans colModel au lieu des formateurs personnalisés d'utilisation. La modification de la couleur d'arrière-plan de la cellule attribue généralement l'attribut style ou class aux cellules de la colonne (<td> éléments). Le rappel cellattr défini dans la colonne colModel permet exactement de le faire. On peut toujours utiliser formateurs prédéfinis comme formatter: "checkbox", formatter: "currency", formatter: "date" et ainsi de suite, mais toujours changer la couleur de fond dans la colonne. De la même manière, le rappel rowattr, qui peut être défini comme l'option jqGrid (en dehors de la colonne spécifique de colModel), permet d'affecter style/classe de la ligne entière (<tr> éléments).

Plus d'informations sur cellattr peuvent être trouvés here et here, par exemple. Another answer explique rowattr.

0

Ici

$("#cell").setCell(Row , Column, Value, { background: '#888888'}); 

En fait, vous même pas besoin formatter personnalisé, si vous avez l'intention juste de le faire pour le réglage des couleurs. Vous pouvez même définir la valeur de couleur d'ici comme,

var color = (Value == "Y") ? "green" : "red"; 
$("#cell").setCell(Row , Column, Value, { background: '#888888', color: color}); 

Bonne programmation.

+0

@harshh - dites-vous de mettre cette ligne dans ma fonction de code de formatage personnalisé? – leora

+0

@harshh - Je veux vraiment le faire en tant que formateur personnalisé car j'ai une certaine logique conditionnelle basée sur d'autres propriétés de données. Aussi, d'où obtenez-vous Row, Column et Value? – leora

+0

@ooo: Vous ne devez pas utiliser le formateur personnalisé. Au lieu de cela, vous pouvez changer la couleur d'arrière-plan de certaines cellules dans l'événement 'loadComplete'. Vous pouvez obtenir les ids des données chargées en respectant la méthode 'getDataIDs', puis obtenir les données de la cellule dans une boucle avec' getCell' examiner là et changer le style de cellule avec 'setCell' en utilisant la chaîne vide comme paramètre de données (voir http: //www.trirand.com/jqgridwiki/doku.php?id=wiki:methods pour plus de détails). Vous pouvez également utiliser 'formater: case à cocher' en plus. – Oleg

0

Voici ce que je faisais:

jQuery("#grid_id").jqGrid({ 
    ... 
     colModel: [ 
      ... 
      {name:'price', index:'price', width:60, align:"center", editable: true, formatter:myFmatter}, 
      ... 
     ], 
     afterInsertRow: function(rowId, data) 
     { 
      $("#grid_id").setCell(rowId, 'price', '', {'background-color':'#' + data.colorHEX}); 
     } 
... 
});