另一种情况:当你在向导里选用“使用SQL语句”的模式再次运行主查询时,它将影响GetCategoryWithBinaryDataByCategoryID方法的SELECT命令返回的列(换句话说,主查询没有返回Picture列,再次运行主查询时将使GetCategoryWithBinaryDataByCategoryID方法也不会返回Picture列)。所以,应确保GetCategoryWithBinaryDataByCategoryID方法的SELECT命令返回Picture列。
注意:每次访问DisplayCategoryPicture.aspx页面时,都会访问数据库并返回所需的图片。如果图片自最近一次访问以来没有改变过的话,这样每次访问数据库再返回数据的做法效率是不高的。幸运的是,HTTP允许使用conditional GETs,这样的话,客户端使HTTP请求发送一个If-Modified-Since HTTP header。If-Modified-Since HTTP header包含了客户端最近一次从服务器获取的数据以及时间。如果请求的内容没有发生改变,服务器响应为Not Modified status code (304),并不返回请求的内容。简而言之,如果请求的资源自最近一次访问以来没发送改变的话,服务器将不会回传该资源,以达到减轻服务器负荷的目的。
第四步:在GridView控件里显示Category Pictures
现在我们有一个web页面来显示某个特定种类的图片的。通过Image Web控件或 HTML <img>元素来指向DisplayCategoryPicture.aspx?CategoryID=categoryID页面,从而达到显示该图片的目的。我们可以在GridView控件或DetailsView控件的 ImageField里显示图片。ImageField的DataImageUrlField属性、DataImageUrlFormatString属性与HyperLinkField的DataNavigateUrlFields属性、DataNavigateUrlFormatString属性用法相似。
让我们对DisplayOrDownloadData.aspx页面里名为Categories的GridView控件进行扩充。添加一个ImageField,设其DataImageUrlField属性为CategoryID;
DataImageUrlFormatString属性为DisplayCategoryPicture.aspx?CategoryID=https://www.jb51.net/article/{0}。这样将为GridView增加一列,呈现为一个<img>元素,其src属性为DisplayCategoryPicture.aspx?CategoryID=https://www.jb51.net/article/{0},其中{0}将由GridView row的CategoryID值填充。
图12:为GridView控件添加一个ImageField
添加完成后,你的GridView控件的声明代码看起来应像下面这样:
<asp:GridView runat="server" AutoGenerateColumns="False" DataKeyNames="CategoryID" DataSourceID="CategoriesDataSource" EnableViewState="False"> <Columns> <asp:BoundField DataField="CategoryName" HeaderText="Category" SortExpression="CategoryName" /> <asp:BoundField DataField="Description" HeaderText="Description" SortExpression="Description" /> <asp:TemplateField HeaderText="Brochure"> <ItemTemplate> <%# GenerateBrochureLink(Eval("BrochurePath")) %> </ItemTemplate> </asp:TemplateField> <asp:ImageField DataImageUrlField="CategoryID" DataImageUrlFormatString="DisplayCategoryPicture.aspx?CategoryID=https://www.jb51.net/article/{0}"> </asp:ImageField> </Columns> </asp:GridView>
花几分钟在浏览器里查看该页面,注意每一行记录现在都包含一张该类的图片。
图13:每一行记录都显示一张图片
总结:
在本节我们探讨了如何显示二进制数据,数据是如何呈现的取决于它的类型。对PDF小册子文件来说,我们提供了一个“View Brochure”链接,当点击它时,直接将用户指向PDF小册子文件。对某个种类的图片,我们先是创建一个页面来从数据库获取并显示它,然后再在一个GridView控件里显示图片。既然看到了如何展示二进制数据,我们准备探讨如何对其展开插入、更新、删除操作。接下来的教程我们看如何将上传文件和相应的数据库记录联系起来。然后,再探讨如何更新现存的二进制数据,以及当删除数据库记录时如何删除相应的二进制数据。
祝编程快乐!
作者简介
本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的书,是4GuysFromRolla.com的创始人,自1998年以来一直应用 微软Web技术。大家可以点击查看全部教程《[翻译]Scott Mitchell 的ASP.NET 2.0数据教程》,希望对大家的学习ASP.NET有所帮助。
您可能感兴趣的文章: