2010-02-11 2 views
2

J'ai des problèmes avec mon GridView dans ASP.NET, qui répertorie quelques lignes de documents. Certaines des lignes (c'est-à-dire des documents) ne sont pas payantes et nécessitent une icône de magasinage, ce qui amène le clicker à une autre page complètement. Les autres lignes n'ont pas besoin d'icône car elles sont payées.Affichage conditionnel de l'icône dans C#/ASP.NET

C'est ce que j'ai jusqu'ici, bien que HyperLink lève une erreur disant qu'il ne peut pas lancer un HyperLinkField à un HyperLink. Des idées? Est-il préférable de créer un objet de HyperLinkField par C# au lieu de ASP par exemple?

Toute l'aide est beaucoup, beaucoup, beaucoup appréciée!

// Jenny

protected void getImages(Object src, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       BusinessClasses.BusinessEntities.DocumentEntity dataRow = (BusinessClasses.BusinessEntities.DocumentEntity)e.Row.DataItem; 
       string status = dataRow.Status.ToString(); 

       TableCellCollection myCells = e.Row.Cells; 
       if (status == "UnPaid") 
       { 
        HyperLink planLink = (HyperLink)myCells[myCells.Count - 1].Controls[0]; 
        planLink.ImageUrl = string.Format("~/Images/Icons/icon_buy.png/"); 
        planLink.ToolTip = "Köp"; 
       } 
      } 
     } 


Répondre

1

Je convertir votre champ de lien hypertexte vers un champ modèle avec un lien hypertexte à l'intérieur. Ensuite, le code que vous utilisez devrait fonctionner.

Un hyperlien n'est pas un hyperlien.

Voici un exemple:

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:HyperLink ID="link" runat="server"/> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

C'est ce que je ferais! – Eric

1

Dans ce genre de cas, je n'utilise généralement un TemplateColumn avec une expression conditionnelle sur la base des données et embêtez pas avec le codage de l'état dans le code-behind.

<asp:TemplateColumn HeaderText="Status"> 
    <%# 
     (Container.DataItem("Status")=="Unpaid" ? 
     "<a href='something'><img src='icon1' /></a>" : 
     string.Empty) 
    %> 
</asp:TemplateColumn> 
+0

Est-ce que iif fonctionne dans C#? Je pensais que c'était une chose VB. Je pensais que C# utilisait quelque chose comme ça pour iif. chaîne str1 = (str.Trim() = string.Empty? "Hi": "Bye"); – Aaron

+0

@Aaron - tu as raison ... la dernière fois que je l'ai fait, je travaillais en VB et je l'ai copié à partir de ce projet. Je vais le changer en C#. – womp

0

Je pense que vous devriez utiliser une solution plus simple. Toutes les données dont vous avez besoin sont accessibles via Eval, donc pas besoin d'écrire des gestionnaires d'événements, et votre distribution ne fonctionnera pas car HyperLinkField n'est pas un HyperLink.

Donc tout ce dont vous avez besoin est de créer un champ de modèle avec un lien hypertexte et utiliser Eval pour afficher/masquer l'icône comme dans l'exemple ci-dessous:

<asp:TemplateField HeaderText="Status"> 
    <ItemTemplate> 
    <asp:HyperLink ID="HyperLink1" runat="server" ImageUrl="~/Images/Icons/icon_buy.png/" 
     ToolTip="Köp" NavigateUrl="Your nav path here" 
     Visible='<%# Eval("Status").ToString()=="UnPaid" %>' ></asp:HyperLink> 
    </ItemTemplate> 
</asp:TemplateField> 

Ne pas oublier d'enlever le gestionnaire d'événements;)

+0

Si vous l'aimez, marquez ma réponse comme la meilleure réponse;) – Wagner

0

Merci à tous! J'ai essayé d'en faire un HyperLink dans le code ASP mais ça ne fonctionnait toujours pas (erreur dans le casting). Bien que la solution de Wagner ait fonctionné comme un charme! Salutations, vous avez fait ma journée!