2011-01-19 4 views
0

J'ai une sqldatasource qui charge les données de mon serveur et les place dans une grille de données.Modifier la couleur de la ligne en fonction de la valeur d'une colonne dans la ligne

J'ai une colonne nommée clnumber qui a, les numéros 1,2,3

Ce que je veux que chaque ligne ont une couleur différente en fonction du nombre est dans cette colonne de datarow

C'EST lE CODE I USED

$(document).ready(function() { 

    $("#<%=GridView1.UniqueID%> tr").each(function() { 

     var number = $(this).children('td:eq(6)').text(); 

     if (number == 'OK') { 
      $(this).children('td').css({ "background-color": "lightgreen" }); 

     } 
    }) 
}); 
+0

Un problème flagrant avec cet extrait de jQuery est que « GridView1 » ne se réfère pas vraiment à quoi que ce soit. Maintenant, '# Gridview1' ou '.Gridview1' pourrait fonctionner. Voir mon nouveau message ci-dessous avec une solution jQuery à ce problème. – Didaxis

Répondre

2

Accordée que vous avez donné votre gridview une classe css appelée « myGridView », vous pouvez faire ce qui suit: Où 'td: eq (1)' fait référence à la deuxième cellule d'une rangée. Cela dépendra bien sûr de la cellule de votre rangée qui contient ce nombre magique.

Je suis certain que ce n'est pas l'utilisation la plus élégante de jQuery, mais vous pouvez factoriser comme vous le souhaitez

+0

pour Parfois, cela ne fonctionne pas .gridview1 si mon nom gridview est gridview1 et cela fait-il une différence si j'ai déjà une feuille de style. – MyHeadHurts

+0

Si vous avez déjà une feuille de style, cela peut faire la différence, même si c'est peu probable puisque ce que j'ai posté rendra css en ligne (via l'attribut style de la balise de la cellule) qui devrait prévaloir sur votre feuille de style. Notez également que j'ai supposé que la grille dans mon exemple a une classe css nommée 'myGridView'. Si vous essayez d'utiliser l'ID de la vue de la grille, je suppose que cela ne fonctionnera pas car ASP.NET affichera un identifiant différent dans la sortie HTML. Donner à la grille un nom de classe CSS permettra de résoudre ce problème. – Didaxis

+0

cela a fonctionné parfaitement merci le seul problème est quand je postback ou mettre à jour le panneau la grille est dans le retour à la normale: / – MyHeadHurts

1

en fonction du nombre comment?
Première rangée blanche, deuxième gris?

if(rownumber%2 == 0) //white 
else //grey 

ou l'inverse.

+0

qui le fera automatiquement pour chaque ligne de la grille? – MyHeadHurts

+0

Placez-le dans l'événement GridView_RowDataBound ou bien, si votre GridView a une pagination, elle ne sera appliquée que pour les lignes présentes au moment de l'exécution du code. –

+0

Oui. tout nombre divisé par deux sera blanc, les autres seront gris. –

1

Si le nombre qui dicte quelle couleur doit être utilisée est réellement généré dans la sortie HTML, pourquoi ne pas utiliser javascript?

+0

Thats ce que beaucoup de gens ont dit en ligne, mais je ne suis pas familier avec javascript, certains ont dit même jquery était une possibilité – MyHeadHurts

+0

Oui, jQuery est ce que je voudrais utiliser. Référencez jQuery dans la page HEAD en utilisant une balise SCRIPT, puis parcourez simplement chaque ligne, examinez chaque ligne et la cellule particulière qui contient ce numéro dans cette ligne et écrivez une petite fonction qui définira la couleur d'arrière-plan de la ligne en utilisant CSS. Je suis désolé, mais c'est une approche beaucoup plus simple que de jouer avec les gestionnaires d'événements pour que la grille de données puisse extraire quelque chose qui est purement un problème de mise en page/CSS. – Didaxis

+0

J'ai essayé en utilisant le code jquery je vais poster ci-dessus et cela n'a pas fonctionné – MyHeadHurts

1

Vous pouvez utiliser semblable à ceci:

/// <summary> 
    /// Updates the row fore colour to show the line type 
    /// </summary> 
    /// <param name="sender">object</param> 
    /// <param name="e">args</param> 
    protected void gvLineValues_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     try 
     { 
      //Format the row 
      this.FormatRow(e); 
     } 
     catch (Exception ex) 
     { 
      ErrorLogging.LogError(ex); 
     } 
    } 

    /// <summary> 
     /// Formats a gridview row 
     /// </summary> 
     /// <param name="e">Gridview event args</param> 
     private void FormatRow(GridViewRowEventArgs e) 
     { 
      try 
      { 
       //Change the forecolor of the row 
       if (e.Row.RowType == DataControlRowType.DataRow) 
       { 
        OrderLine oOrderLine = e.Row.DataItem as OrderLine; 

        if (oOrderLine != null) 
        { 
         e.Row.ForeColor = oOrderLine.ForeColour; 


           //Check the line is over budget 
           if (oOrderLine.OverBudget) 
           { 
            e.Row.BackColor = ColourManager.OverBudgetItemBackColour; 
            e.Row.ToolTip = String.Format("Item over {0} and awaiting your approval", GlobalizationManager.Budget); 
           } 
           else 
           { 
            e.Row.BackColor = ColourManager.WithinBudgetItemBackColour; 
            e.Row.ToolTip = "Item awaiting your approval"; 
           } 
          } 
         } 

         //Change the back colour of the row if its a deleted row 
         if (oOrderLine.Deleted) 
         { 
          e.Row.Font.Strikeout = true; 
          e.Row.ToolTip = "This line has been deleted"; 
         } 
        } 
       } 
      } 
      catch (Exception) 
      { 
       throw; 
      } 
     } 

vous pourriez faire quelque chose comme

switch (DataItem.ColorNumber) 
{ 
case 1: 

e.row.backcolor = Color.blue; 

break; 

case 2: 

e.row.backcolor = Color.red; 

break; 

case 3: 

e.row.backcolor = Color.white; 

break; 

} 
+0

merci pour votre aide ce sera probablement la méthode que j'ai utilisée, sauf si je peux le faire avec javascript – MyHeadHurts

Questions connexes