【问题标题】:How do I replace a Hyperlink in a Gridview Column with an image, depending on the text in the column?如何根据列中的文本将 Gridview 列中的超链接替换为图像?
【发布时间】:2012-10-29 06:51:30
【问题描述】:

问题几乎说明了一切。在我的 aspx 页面上,我有一个 GridView,在 Columns 下,我有一堆 BoundFields,其中一个是 TemplateField

        <asp:TemplateField HeaderText = "Status">
            <ItemTemplate>
                <asp:HyperLink ID = "HyperLink1" runat = "server" Target = "_blank"
                    NavigateUrl = '<%# Eval("URL") %>'
                    Text = '<%#Eval("Status") %>'>
                </asp:HyperLink>
            </ItemTemplate>
        </asp:TemplateField>

现在,我希望此超链接映射到不同的图像,具体取决于文本的评估对象。例如,“成功”显示的是一个大大的笑脸,“失败”显示的是皱眉脸,等等。我怎样才能做到这一点?

感谢收看。

【问题讨论】:

  • 我应该补充一下,这是我的第一列,所以在 RowDataBound 方法中,我将操作 e.Row.Cells[0]

标签: c# asp.net image gridview hyperlink


【解决方案1】:

你可以在超链接中放一张图片

<img src='/images/status/<%#Eval("Status") %>.jpg' />

只需按名称为每个状态制作不同的图像。否则你可能不得不对 DataBind 事件做一些事情。

【讨论】:

    【解决方案2】:

    试试这个

    protected void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink HyperLink1 = e.Row.FindControl("HyperLink1");
            if(SomeText == "Success")
              HyperLink1.NavigateUrl = "Url to Smiley";
            else
              HyperLink1.NavigateUrl = "Url to Frowney";
        }
    }
    

    【讨论】:

    • 这并不能让我改变图像。而且,我不知道 URL 是什么,因为每一行都不一样
    【解决方案3】:
    HyperLink HyperLink1 = (HyperLink)e.Row.FindControl("HyperLink1");
    
        switch (HyperLink1.Text)
            {
                 case "Completed":
                      HyperLink1.ImageUrl = "Images\\Success.png";
                      HyperLink1.ToolTip = "Completed";
    

    ToolTip 属性映射到图像的替代文本。

    感谢codingbiz让我开始。

    【讨论】:

      【解决方案4】:

      如果您尝试设置 ImageUrl 属性,我建议您使用 RowDataBound 事件。处理程序方法可能类似于:

      protected void questionsGridView_RowDataBound(object sender, System.Web.UI.WebControls.GridViewRowEventArgs e)
      {
          DataSourceDataType row;
          HyperLink hyperLink1;
      
          if (e.Row.RowType == DataControlRowType.DataRow & e.Row.DataItem is DataSourceDataType)
          {
              row = (DataSourceDataType)e.Row.DataItem;
              hyperLink1 = (HyperLink)e.Row.FindControl("HyperLink1");
      
              hyperLink1.ImageUrl = (row.IsSuccess) ? "~/images/success.png" : "~/images/failure.png";
          }
      }
      

      我使用的另一个技巧是更改要绑定的数据对象,使其具有指示要使用的 URL 的属性:

      partial class DataSourceDataType
      {
          public string SuccessImgURL
          {
              get
              {
                  return (IsSuccess) ? "~/images/success.png" : "~/images/failure.png";
              }
          }
      }
      

      然后你绑定到那个属性。

      注意:IsSuccess 需要替换为您自己的字段名称或布尔条件。
      我经常将它与 LINQ to SQL 对象一起使用,因此可以使用部分类在单独的文件中添加属性。这样您就不必担心 LINQ to SQL 工具会删除您添加的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 1970-01-01
        • 2016-03-19
        相关资源
        最近更新 更多