在C#/ASP.NET中有条件地显示图标

在C#/ASP.NET中有条件地显示图标,c#,asp.net,casting,hyperlink,C#,Asp.net,Casting,Hyperlink,我在ASP.NET中的GridView遇到问题,它列出了几行文档。一些行(即文档)是未支付的,需要一个购物图标,它将点击器完全带到另一个页面。其他行不需要图标,因为它们是付费的 这就是我到目前为止所做的,尽管HyperLink抛出了一个错误,表示它无法将超链接字段强制转换为超链接。有什么想法吗?例如,通过C#而不是ASP创建HyperLinkField的对象是否更好 所有的帮助都是非常非常感谢的 //珍妮 protected void getImages(Object src, GridView

我在ASP.NET中的GridView遇到问题,它列出了几行文档。一些行(即文档)是未支付的,需要一个购物图标,它将点击器完全带到另一个页面。其他行不需要图标,因为它们是付费的

这就是我到目前为止所做的,尽管HyperLink抛出了一个错误,表示它无法将超链接字段强制转换为超链接。有什么想法吗?例如,通过C#而不是ASP创建HyperLinkField的对象是否更好

所有的帮助都是非常非常感谢的

//珍妮

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";
                }
            }
        }


我会将您的超链接字段转换为包含超链接的模板字段。然后,您正在使用的代码应该可以工作

超链接字段不是超链接

以下是一个例子:

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

在这种情况下,我通常只使用TemplateColumn和基于数据的条件表达式,而不必费心在代码隐藏中对条件进行编码

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

我认为您应该使用一个更简单的解决方案。您需要的所有数据都可以通过Eval访问,因此无需编写事件处理程序,而且您的强制转换将无法工作,因为HyperLinkField不是超链接

因此,您只需创建一个带有超链接的模板字段,并使用Eval显示/隐藏图标,如下面的示例所示:

<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>


别忘了删除事件处理程序;)

iif在c#中工作吗?我以为这是VB的东西。我以为c#在iif中使用了类似的东西。string str1=(str.Trim()=string.Empty?:“嗨”:“再见”);@Aaron-你说得对……上次我这么做时,我在VB中工作,只是从那个项目中复制了它。我将它改为c#。