2017-10-20 23 views
0

J'ai deux colonnes dans jqgrid, ShopID et NetSales, et je voudrais ajouter Contribution Column qui sera une colonne calculée. la formule est NetSales divisée par Total. s'il vous plaît voir l'image par exemple. Je sais comment obtenir le total en utilisant getCol comme ceci var sumtotal = grid.jqGrid('getCol', 'NetSales', false, 'sum');, mais ne savent pas comment l'utiliser plus loin pour la division. J'ai essayé, mais ça n'a pas marché. aidez s'il vous plaît.Comment obtenir la somme totale d'une colonne dans jqgrid

i

+1

Quel type de données a la grille? Je vous recommande de ne pas utiliser la colonne calculée. Il est très facile de calculer la somme ayant directement les données. Ayant la somme, vous pouvez remplir les données de la colonne Contribution en fonction de la somme et NetSales de la colonne. – Oleg

+0

@Oleg, j'ai le type de données local monsieur. – davidb

Répondre

2

Généralement vous avez deux façons de résoudre le problème

  1. Comme mentionné dans la note que vous devez calculer la somme de la colonne avant de mettre les données dans la grille. Si vous avez cette valeur, vous pouvez utiliser un fomatter personnalisé pour calculer le pourcentage. Dans ce cas, la somme calculée doit être définie comme globale dans la portée.

  2. Calcul direct de ce sans utiliser la méthode jqGrid - voir ci-dessous

Supposons que vous ayez des données locales comme celui-ci

mydata = [ 
    {ShipId: 1, NetSales: 150000}, 
    {ShipId: 2, NetSales: 200000}, 
    ... 
] 

Vous pouvez facilement faire (pas de chèques, il est juste idée

var sum = 0; 
$.each(mydata, function(i, row) { 
    sum += parseFloat(row.NetSales); 
} 
$.each(mydata, function(i, row) { 
    if (sum > 0) { 
     row.Contribution = parseFloat(row.NetSales)/sum*100; 
    } 
} 

Ensuite, mettez mydata dans jqGrid directement sans faire de calcul et vous Se formateur personnalisé pour afficher le pourcentage.

+0

merci beaucoup monsieur, j'essaie cette méthode maintenant, mettra à jour prochainement. – davidb

+0

J'ai appliqué la deuxième méthode monsieur selon votre exemple, et cela fonctionne. Merci. – davidb