2010-09-17 9 views
0

J'ai un griview qui est lié à un sqldatasource et changé dynamiquement. Comment changer la couleur de la cellule d'arrière-plan en fonction de la valeur? par exemple, 0-0,5 vert, 0,5-1 rouge, comme cela.ASP.NET gridview fond changeant de cellule dynamique

<asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False" 
     DataSourceID="SqlDataSource3"> 

Répondre

3

Vous voulez probablement utiliser l'événement RowDataBound du GridView, quelque chose comme ça:

<asp:GridView ID="grid1" runat="server" AutoGenerateColumns="False" 
    DataSourceID="SqlDataSource3" OnRowDataBound="ChangeRowColor"> 

protected void ChangeRowColor(object sender, GridViewRowEventArgs e) 
{ 
    if(((DataRow)e.Row.DataItem)[1] == .5) 
    { 
    e.Row.Cell[1].BackColor = Colors.Green; 
    } 
} 

Dans mon exemple, je suppose que les données utilisées pour remplir la grille sont des DataRows (c.-à-d. à partir d'un datatable), mais essentiellement l'idée est de transformer l'objet DataItem de la ligne en cours en quel que soit le type d'objet lié, vérifier la valeur de la propriété dont vous avez besoin, puis définir la BackColor de la cellule correspondante.

Vous pouvez également inspecter la propriété de texte de la cellule, mais vous devrez peut-être effectuer une analyse supplémentaire ou quoi-ne pas obtenir de la chaîne à la valeur que vous souhaitez comparer.

1

Une solution consiste à créer une méthode de serveur que vous pouvez appeler pendant DataBind, qui renverra un nom de classe css.

Liez l'attribut de classe css à un appel de cette méthode et transmettez l'élément de données approprié.

Ceci est un exemple du concept, vous devrez l'adapter à vos besoins.

... fichier Css

.NegativeMoneyText 
{ 
    color: #FF0000; 
} 

... fichier Aspx

<asp:Label ID="lblPaid" runat="server" CssClass='<%# getMoneyCssClass(Eval("PAID_AMOUNT").ToString()) %>' Text='<%# formatMoney(Eval("PAID_AMOUNT").ToString()) %>'></asp:Label> 

... code derrière

public string getMoneyCssClass(string amount) 
{ 
    if (!string.IsNullOrEmpty(amount)) 
    { 
     double val = double.Parse(amount); 
     if (val < 0) 
      return "NegativeMoneyTextCss"; 
    } 
    return return "PositiveMoneyTextCss"; 
}