【问题标题】:href is not showing as HyperLink in GridViewhref 未在 GridView 中显示为超链接
【发布时间】:2013-04-26 10:28:49
【问题描述】:

关于我的这些问题,

How to create a HyperLink field out of SQL query

GridView Table 1 related to Table 2

如果我运行这个 SQL 查询,我会得到类似的结果,

SELECT CrateTitle,CrateDescription,CrateID,
stuff(
(
    SELECT ',<a href=''' + [FruitWebsite] + ''' target=''_blank''>'+ [FruitTitle] +'</a>' FROM fruits WHERE CrateID = t.CrateID FOR XML path('')
),1,1,' ') Types_of_Fruits_in_Crate
FROM (SELECT DISTINCT CrateTitle,CrateDescription,CrateID FROM fruits )t

但是我的 GridView 没有显示我想要的,我想要一个 HyperLink 而我的 gridview 没有把这个 &lt;a href='www.mango1.com' target='_blank'&gt;Mango 1&lt;/a&gt; 作为一个 HyperLink。

现在如果我试试这个,

SELECT ',<asp:HyperLink ID='sadasdasdas' + [FruitWebsite] + ''' target=''_blank''>'+ [FruitTitle] +'</a>' FROM fruits WHERE CrateID = t.CrateID FOR XML path('')
),1,1,' ') Types_of_Fruits_in_Crate
FROM (SELECT DISTINCT CrateTitle,CrateDescription,CrateID FROM fruits )t

然后我开始收到错误,因为语法不正确。

如果你想试试小提琴http://www.sqlfiddle.com/#!3/96a49/18

【问题讨论】:

标签: c# webforms


【解决方案1】:

为什么要更改 SQL 以完整输出超链接?

当然你应该使用 GridView 控件来通过HyperLinkColumn 执行此操作,所以 SQL:

SELECT CrateTitle,CrateDescription,CrateID,FruitWebsite,FruitTitle
FROM fruits
-- WHERE CrateID = ? -- add criteria if needed

然后是 GridView:

<asp:GridView id="grd" runat="server">
    <columns>
     <asp:hyperlinkfield datatextfield="FruitTitle"
        datanavigateurlfields="FruitWebsite"
        datanavigateurlformatstring="{0}"          
        headertext="Linky link"
        target="_blank" />
    </columns>
</asp:GridView>

编辑


如果您愿意,可以在代码隐藏中动态添加:

HyperLinkField hlf = new HyperLinkField();
hlf.datatextfield = "FruitsTitle"; // Or a string variable
hlf.datanavigateurlfields="FruitWebsite"; // Or a string variable
hlf.datanavigateurlformatstring="{0}"; // Or a string variable          
hlf.headertext="Linky link"; // Or a string variable
hlf.target = "_blank";

GrdiView grd = new GrdiView();

grd.columns.add(hlf);

这完全出乎我的意料,因为我面前没有 IDE,所以某些语法可能已经用完或需要大写字母等...但是概念是您可以在代码隐藏中定义一个列,将其添加到 GridView,无论是在代码隐藏中还是在页面上定义,然后绑定数据就可以了!

【讨论】:

  • 谢谢,但我正在使用 c# 在运行时创建 GridView
  • 那么在代码隐藏中使用同样的概念? grd.columns.add(hyperlinkcol) - 所有相同的属性都可用于动态创建的列:msdn.microsoft.com/en-GB/library/…
  • 按您的方式尝试时出错,System.Web:在所选数据源上找不到名为“FruitWebsite”的字段或属性。 :在 System.Web.UI.WebControls.HyperLinkField.OnDataBindField(
  • 能否请您添加一些有关您的 SQL 表设置的细节?这是因为没有直接返回该列,所以我会猜测一下。
  • 感谢帮助,我现在正在使用这个,ashishblog.com/blog/…
【解决方案2】:

虽然@RemarkLima 向您展示了更好的解决方案,但您可以通过设置HtmlEncode="False"(默认为True)在GridView 中呈现HTML

<asp:BoundField DataField="Name" HeaderText="Name" HtmlEncode="false" />

【讨论】:

  • 我已经试过了,但它不起作用,如果你看看我的老问题,谢谢
  • HtmlEncode是要走的路,因为我看到你在一行中有 3 个链接。可能在您的链接之前加上http://
  • 在我的实际项目中,我确实有 https:// 仍然没有工作,但是,我想我需要这个,ashishblog.com/blog/…
猜你喜欢
  • 2013-07-14
  • 2017-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 2013-04-19
  • 2019-02-22
相关资源
最近更新 更多