Question

Je cherche un moyen d'appliquer de manière sélective une classe CSS à des lignes individuelles d'un GridView en fonction d'une propriété de l'élément lié aux données.

exemple:

La source de données de GridView est une liste générique de SummaryItems et SummaryItem a une propriété ShouldHighlight . Lorsque ShouldHighlight == true , le code CSS de la ligne associée doit être défini sur en surbrillance

.

des idées?

Était-ce utile?

La solution

très facile

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        DataRowView drv = e.Row.DataItem as DataRowView;
        if (drv["ShouldHighlight"].ToString().ToLower() == "true")
            e.Row.CssClass = "highlighted";
    }
}

le code ci-dessus fonctionne si vous utilisez un DataTable en tant que source de données

changer en:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        myClass drv = (myClass)e.Row.DataItem;
        if (drv.ShouldHighlight)
            e.Row.CssClass = "highlighted";
    }
}

juste pour l'exemple ci-dessus lors de l'utilisation de génériques:

public class myClass
{ 
    public Boolean ShouldHighlight
    { get; set; }
}

si vous travaillez avec Génériques (liste, dictionnaire, etc.)

garder à l'esprit:

e.Row.dataItem

retourne toujours l'intégralité de l'objet avec lequel vous remplissez la ligne, il est donc facile de manipuler l'apparence des données dans la page Web.

vous devez utiliser l'événement RowDataBound qui se déclenchera une fois que les données auront été attachées à l'objet ligne mais que le code HTML n'a pas encore été écrit dans la page. Vous pouvez ainsi vérifier la valeur ShouldHighlight (j'ai converti en chaîne car je ne le fais pas connaissez le type, vous pouvez le changer si vous savez que c'est une valeur booléenne).

ce code est beaucoup plus rapide que le code megakemp car vous ne créez pas d'objet List et vous le remplissez avec la source de données complète pour chaque ligne ...

P.S. Consultez ce site Web . Vous pouvez trouver plusieurs tutoriels pour votre projet à l'aide de l'objet GridView

Autres conseils

Vous devez garder à l’esprit que la définition de la propriété Row.CssClass dans les gestionnaires d’événements RowCreated ou RowDataBound écrasera tous les styles par défaut que vous avez appliqués au niveau de la grille. GridView vous permet d’accéder facilement aux styles de ligne via des propriétés telles que:

gvGrid.AlternatingRowStyle.CssClass = ALTROW_CSSCLASS
gvGrid.RowStyle.CssClass = ROW_CSSCLASS

Toutefois, lorsque vous affectez une valeur CssClass à une ligne spécifique (comme vous en avez besoin dans ce cas, l'affectation remplace toute affectation de niveau supérieur au niveau de la grille. Les assignations ne seront pas "en cascade". comme nous pourrions les aimer. Donc, si vous voulez conserver l'affectation de classe de niveau supérieur et également une couche plus spécifique, vous devez alors vérifier l'état de la ligne pour savoir quel type de ligne vous traitez et concaténer vos noms de classe en conséquence.

If(item.ShouldHighlight)
 {
    If(e.Row.RowState == DataControlRowState.Alternate)
    {
        e.Row.CssClass = String.Format("{0} {1}", "highlight", ALTROW_CSSCLASS)
    }
    else
    {
        e.Row.CssClass = String.Format("{0} {1}", "highlight", ROW_CSSCLASS)
    }


}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top