两种为 GridView 添加超链接的方法

GridView
看似很死板,其实它的的功能很强大,只要我们耐心研究,都能满足我们的需求的。今天要说的是为其列添加超链接。

问题描述:HyperLink控件的NavigateUrl=’~/PersonalManage/userInfo.aspx?uid=<%#Eval(“userID”) %>’

asp.net1.1及2.0方式下的绑定语法有何区别,如何在按预定格式绑定数据;如何多个参数绑定到HyperLink等.请参看下面链接

一种是使用 HyperLinkField

运行结果,链接变成:

ASP.NET 1.X
1)最简单的绑定语法:
<%# Container.DataItem(“expression”) %>
使用方法如下:
<asp:Label id=”label1″ runat=”server”
     Text='<%# Container.DataItem(“CustomerName”) %>’

2)如果你希望格式化绑定数据,应该采用下面的语法:
<%# DataBinder.Eval(Container.DataItem, “expression”[, “format”])
%>
使用方法如下:
<asp:Label id=”label1″ runat=”server”
     Text='<%# DataBinder.Eval(Container.DataItem, “OrderDate”, 
_
                                         “{0:dddd d MMMM”]) %>’

Data Binding Statements in ASP.NET 2.0
1)简单绑定
<%# Eval(“expression”) %>
2)带格式的绑定
<%# Eval(“expression”[, “format”]) %>
像在1.1里面那样,你可以做更复杂的绑定:
<%# Eval(“Price”, “Special Offer {0:C} for Today Only!”) %>
3)多列绑定
    <asp:HyperLinkField runat=”server”
         DataTextField=”CustomerName”
         DataNavigateUrlFields=”CustomerID,City”
         DataNavigateUrlFormatString=
           “”
/>
也可以动态编码实现,如下:
void GridView1_Load(object sender, EventArgs e) {
  String[] aFields = new String[2];
  aFields[0] = “CustomerID”;
  aFields[1] = “City”;
  HyperLinkField oHLField = (HyperLinkField) GridView1.Columns[1];
  oHLField.DataNavigateUrlFields = aFields;
  oHLField.DataNavigateUrlFormatString =
           “”
}

–===——————————————===—
对于XML的绑定,参看下面的链接:
The New Data Binding Syntax for XML Data
>>

这很简单,通过可视化设计,只要设计好超链接模板,就可以了,当然,其扩展性也不强。

“) %>

  • 将要使用的字段写在 DataNavigateUrlFields 中,多个字段用逗号隔开。
  • 将超链接模板写在 DataNavigateUrlFormatString 中,模板中要引用
    DataNavigateUrlFields 的字段值时,就用 {0}、{1}、{2}……分别表示第
    1、2、3……个字段。

也就是说绑定部分没有被解析

<asp:HyperLinkField DataNavigateUrlFields=”vid,cid”
DataNavigateUrlFormatString=”?vid={0}&cid={1}” Text=”链接” />

方法一: NavigateUrl=’ <%#Eval(“userID”,”~/PersonalManage/userInfo.aspx?uid={0}”) %>’

超链接文字也是类似。

方法二: NavigateUrl='<%#
“~/PersonalManage/PersonalInfoChange.aspx?UID=”+Eval(“userID”) %>’

另外一种是在模板中使用

 

模板中使用也非常简单,只是要注意使用 HyperLink
这个服务器端控件不一定功能强大。

如果是GrilView控件的HyperLinkField,则可以这样写(因为GrilView控件的HyperLinkField的NavigateUrl不支持直接在=号后面加绑定)

<asp:HyperLink runat=”server” Text='<%# Eval(“realName”) %>’
NavigateUrl=’?uid=<%#%20Eval(“uid”)%>’></asp:HyperLink>

<asp:HyperLinkField HeaderText=”个人信息” Text=”查看”DataNavigateUrlFormatString=”~/PersonalManage/PersonalInfoChange.aspx?uid={0}”DataNavigateUrlFields=”userID” />

实际上,上面的代码有问题,Eval(“realName”)
由于直接放在属性中,可以解析出来,而 Eval(“uid”)
和一些文字混杂起放在属性中,Eval(“uid”)
就解析不出来,会直接按原样输出到客户端。

 

解决方法很简单,就是不用服务器端控件,直接用 HTML 的 a 标签。

也可以将HyperLinkField转换为TemplateField,然后再在TemplateField里加HyperLink,再按照前面的方法做即可

<a href=”?uid=<%#%20Eval(“uid”)%>”><%# Eval(“realName”)
%></a>

发表评论

电子邮件地址不会被公开。 必填项已用*标注