加入收藏 | 设为首页 | 会员中心 | 我要投稿 宁德站长网 (https://www.0593zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在ASP.NET 2.0中操作数据之五十三:在Data Web控件显示二进制数

发布时间:2016-11-23 22:27:18 所属栏目:MsSql教程 来源:站长网
导读:导言: 在前面的教程我们阐述了应用程序处理二进制数据的2种模式,以及使用FileUpload 控件从浏览器向服务器文件系统上传文件。当文件上传并存储在文件系统里时,应在相应的数据库记录里存储该文件的存储路径。 我们先来看如何为最终用户提供二进制数据。

导言:

  在前面的教程我们阐述了应用程序处理二进制数据的2种模式,以及使用FileUpload 控件从浏览器向服务器文件系统上传文件。当文件上传并存储在文件系统里时,应在相应的数据库记录里存储该文件的存储路径。

  我们先来看如何为最终用户提供二进制数据。怎样展示二进制数据呢?这取决于其类型。比如图片,我们将其显示为image;如果是PDFs,Microsoft Word文档、ZIP文件或其它类型的数据,或许提供一个“Download”链接比较妥当。

  在本节,我们看如何在GridView和DetailsView一类的数据Web控件里呈现二进制数据,在后面的教程我们将注意力转向将上传文件和数据库联系起来。

第一步:提供BrochurePath值

  表Categories的Picture列存储相关类的图片信息。具体的讲,为16色的低质量位图,大小为172乘120像素,约11 KB。另外还包括一个约78字节的OLE报头,在显示图片的时候需要将其剥离。为什么会有报头信息呢?因为数据库Northwind源于微软的Access数据库。在Access里二进制数据OLE类型来存储的,该类型会添加报头。现在,我们看如何从图片剥离报头,以便显示。在后面的教程我们将创建一个界面,将带报头的这些位图替换为不带报头的等价的JPG图片。

  前面我们考察了如何使用FileUpload控件,让我们继续为服务器文件系统添加文件。不过暂时不用更新Categories表的BrochurePath列,那是下一章的内容。我们现在需要手工为BrochurePath赋值。

  在本教程,当你下载东西时,可以看到在~/Brochures7文件夹有7个PDF小册子,每个小册子对应一个种类,Seafood除外。我故意没为Seafood提供PDF小册子,以便探讨如何处理某些记录没有附带二进制数据的情况。在服务器资源管理器里右键点击Categories,选“查看表数据”,输入文件路径,如图1所示。由于Seafood类没有图片,将其BrochurePath的值设为“NULL”。 

/uploads/allimg/c161121/14OI94435c0-1262X4.gif
图1:手工为表Categories的BrochurePath列键入值

第2步:在GridView里添加一个下载链接

  当为表Categories的BrochurePath列赋值后,我们准备创建一个GridView用于展示每个种类,并附带一个链接下载每个类的小册子。在第4步我们将扩展GridView以显示每个类的图片。

  打开BinaryData文件夹的DisplayOrDownloadData.aspx页面并进入设计模式,从工具箱里拖一个GridView控件到页面,设其ID为Categories,从其智能标签选择绑定到一个名为CategoriesDataSource的ObjectDataSource控件。该控件调用类CategoriesBLL的GetCategories()方法。

/uploads/allimg/c161121/14OI944401F-12Lc8.gif
图2:创建一个名为CategoriesDataSource的ObjectDataSource控件

/uploads/allimg/c161121/14OI9444394F-12X500.gif
图3:设置ObjectDataSource使用CategoriesBLL类

/uploads/allimg/c161121/14OI9444C510-1291430.gif
图4:调用GetCategories()方法

  完成设置后,Visual Studio自动的为CategoryID, CategoryName, Description, NumberOfProducts和BrochurePath生成BoundField。移除NumberOfProducts,因为GetCategories()方法用不上,同样将CategoryID移除了。分别把CategoryName和 BrochurePath的HeaderText属性改为“Category”和“Brochure”。做上述修改后,你的GridView and ObjectDataSource的声明代码看起来应该像下面的这样:

<asp:GridView ID="Categories" 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:BoundField DataField="BrochurePath" HeaderText="Brochure"
  SortExpression="BrochurePath" />
 </Columns>
</asp:GridView>

<asp:ObjectDataSource ID="CategoriesDataSource" runat="server"
 OldValuesParameterFormatString="original_{0}"
 SelectMethod="GetCategories" TypeName="CategoriesBLL">
</asp:ObjectDataSource>

  在浏览器查看该页(如图5)。列出了所有的8个类,除了Seafood,其它7个类的BoundField列里显示各自的BrochurePath值。由于Seafood的BrochurePath为NULL值,看起来为空格。

/uploads/allimg/c161121/14OI944513b0-130S37.gif
图5:显示了每个类别的Name, Description和BrochurePath值

  与其显示BrochurePath的text值,不如创建一个指向小册子的链接。移除BrochurePath,代之以HyperLinkField。设它的HeaderText属性为“Brochure”,Text属性为“View Brochure”, DataNavigateUrlFields属性为“ BrochurePath”。

 

/uploads/allimg/c161121/14OI944534510-131G53.gif
图6:添加一个指向BrochurePath的HyperLinkField

  这样将在GridView里添加一列链接,如图7所示。点“View Brochure”时要么直接在浏览器显示PDF,要么提示用户下载该文件。这取决于浏览器的设置以及是否安装了PDF阅读器。

/uploads/allimg/c161121/14OI944561a0-1321393.gif
图7:点击“View Brochure”访问某类的Brochure

/uploads/allimg/c161121/14OI9445Z150-1335030.gif
图8:显示某类的PDF文件

隐藏无小册子图片的类的“View Brochure” 文本

(编辑:宁德站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读