怎样在 ASP.NET 2.0 的 GridView 控件里有条件地显示图像

ASP.net这个讨论基于自己一个ASP.net程序的需要: 怎么根据数据库的内容在一个 ASP.NET Gridview 控件里显示或不显示一个图标。比方说:我有一个表格要显示一些与会演讲人的信息,姓名、电子邮箱等;并且还要显示一个小别针的图标来显示这个演讲人已上传了一份演讲稿供下载。

基本内容的信息格式样:

Speakers Information
LAST NAME FIRST_NAME EMAIL SPEECH
Gates Bill bill.gates@microsoft.com bill_gates.doc Edit
Schmidt Eric eric.schmidt@google.com   Edit

从上可知,我们有两个演讲人其中一个已有了演讲稿,另一个没有。假设我有一个数据库在后台,其中有一个数据列叫 “speech” 里面含有演讲稿的文件名。一般来说,如果用 boundfield 的话象 <asp:BoundField DataField=”speech” HeaderText=”SPEECH” > 我们可以顺利得到在 gridview 控件里显示这个文件名的结果。

可是,我不想只显示这个文件名,我要的是当这个演讲人有讲稿在数据库里时,我只显示一个小图标,并将这个图标连向已上传的文件以供下载。在 ASP.10/1.1 里,我们一般是通过这个类似 gridview (dataview)的控件的 RowDataBound 事件来生成需要的HTML语言。比如,在 RowDataBound 里,我们需要循环每一个控件的每一行,并找到演讲稿的那个列,进行一定的文本比较判断,如果不是空的,则显示有连接的图标;若是空的,不显示任何文字。

到 ASP.net 2.0,事情变得更简单了。我们可以使用一个新的叫 HyperLinkField 列格式来实现上述所有的一切。主要是这个格式可以让你自由定义 你需要的链接数据来源及显示格式。 在我刚才举的例子里,那我就可以通过它来用数据库存的文件名加一定的服务器目录名来定义我的下载路径,并用那个图标来定义要显示的格式。

更好的就是,因为我的图标显示也是基于我的数据库speech列,不用任何判断代码我的程序也知道当没有演讲稿时,会自动不显示这个图标。

<asp:HyperLinkField DataNavigateUrlFields=”SPEECH” DataNavigateUrlFormatString=”~/docs/{0}” HeaderText=”SPEECH” DataTextField=”SPEECH” DataTextFormatString=”<img src=’images/attach.gif’ alt='{0}’ border=’0′ />” />

对上面代码的说明:
DataNavigateUrlFields – 用来生成 hyperlink 连接的数据库单位
DataTextField – 用来生成显示内容的数据库单位
DataNavigateUrlFormatString – 这个属性可以帮助我使用其他信息来定义最后的连接路径。在例子中,我就加了一个专门的目录名在每个从数据库读出的文件名。这个 {0} 就是表示从 DataNavigateURLFields 得出的内容。
DataTextFormatString – 如同上面的 URL 格式字符,可以使用一些 HTML 标签代码来根据数据来显示漂亮的文字或其他格式。我在这个例子里用 <img src=’images/attach.gif’ alt='{0}’ border=’0′ /> 来显示一个小巧、可爱的小别针,而不是就显示演讲稿的文件名。

好了,下面就是用 asp.net 2.0 来显示的演讲人信息表格。

Speakers Information
LAST NAME FIRST_NAME EMAIL SPEECH
Gates Bill bill.gates@microsoft.com Edit
Schmidt Eric eric.schmidt@google.com   Edit

嘿,不要问我为什么要显示这个图标, :-) 我只是用这个例子来显示 asp.net 2.0里的 HyperLink 的一些用途。 Enjoy programming!

英文原文: How to conditionally display image in Gridview based on data fields in ASP.NET 2.0

One Response to “怎样在 ASP.NET 2.0 的 GridView 控件里有条件地显示图像”

Leave a Reply

Your email address will not be published. Required fields are marked *