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