2010-11-26 34 views
0

Comment pouvez-vous faire une sortie personnalisée pour un gridview lié? C'est à dire. J'ai un champ booléen dans une base de données, plutôt que d'écrire True car je reçois <% # DataBinder.Eval (Container.DataItem, "BoolField")%>, je voudrais mettre une image (comme une coche) dans la vue de la grille. Est-ce possible?Image de sortie dans le DataGrid

Répondre

1

tout d'abord Eval est mal. Il y a une solution avec eval mais je vais l'ignorer exprès.

Il existe 2 autres solutions. Vous pouvez utiliser le champ ImageField et façonner les données pour transmettre l'URL corret de l'image dans une propriété spéciale que vous devez spécifier dans la propriété DataImageUrlField du champ ImageField.

L'autre solution consiste à ajouter un champ de modèle avec un contrôle Image et gérer l'événement RowDataBound obtenir les données de la ligne à partir des arguments d'événement e.Row.DataItem le convertir en le type des éléments de votre source de données et extrait la valeur booléenne. Vous pouvez ensuite utiliser FindControl pour obtenir le contrôle Image et assigner ses propriétés. Quelque chose comme ceci:

protected void Page_Load(object sender, EventArgs e) 
{ 
    gvTest.DataSource = new bool[] { true, false }; 
    gvTest.DataBind(); 
} 

protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     Image imgBool = (Image)e.Row.FindControl("imgBool"); 
     bool data = (bool)e.Row.DataItem; 
     if (data) 
     { 
      imgBool.ImageUrl = "/images/true.jpg"; 
      imgBool.AlternateText = "This is true"; 
     } 
     else 
     { 
      imgBool.ImageUrl = "/images/false.jpg"; 
      imgBool.AlternateText = "This is false"; 
     } 
    } 
}

Cela peut sembler beaucoup de travail, mais rappelez-vous que vous pouvez utiliser ce même gestionnaire pour travailler avec tous les colums dans votre grille dans un type de manière sûre.

+0

Merci compagnon, exactement ce que j'étais après. – Sam

+0

Puis-je demander si, pourquoi est Eval mal? – Sam

+0

Eval est diabolique parce qu'il est basé sur des cordes. Imaginez que vous liez la grille à une liste de produits et que vous liez une colonne via Eval à la propriété ProductName. Cependant, plus tard, vous décidez de changer le nom de la propriété en Nom. Vous n'obtiendrez pas d'erreur de compilation si vous utilisez eval. Si vous liez via les événements de databind vous le ferez. Vous pouvez remarquer que FindControl utilise également des chaînes, mais FindControl est défini dans une seule paire de fichiers (le balisage et le code derrière les fichiers) et vous êtes beaucoup plus susceptible de le voir et de tester le chemin de code connexe si vous changez le nom du contrôle . – Stilgar

0
+0

Avez-vous lu ce que j'ai écrit ou simplement googlé? Je n'essaie pas de sortir une URL d'image. – Sam

+0

La balise img html nécessite src param. Il spécifie l'URL d'une image –