• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 在ASP.NET 2.0中操作数据之五十三:在Data Web控件显示二进制数据

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

作者:heker2007 字体:[增加 减小] 来源:互联网 时间:2017-05-11

heker2007通过本文主要向大家介绍了web程序设计asp.net,vs2010 asp.net web,精通asp.net web api,简述asp.net的web窗体,asp.net等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

导言:

  在前面的教程我们阐述了应用程序处理二进制数据的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”。 

http://files.weikejianghu.com/file_images/article/201605/201605170855051.gif
图1:手工为表Categories的BrochurePath列键入值

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

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

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

http://files.weikejianghu.com/file_images/article/201605/201605170855052.gif
图2:创建一个名为CategoriesDataSource的ObjectDataSource控件

http://files.weikejianghu.com/file_images/article/201605/201605170855053.gif
图3:设置ObjectDataSource使用CategoriesBLL类

http://files.weikejianghu.com/file_images/article/201605/201605170855054.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>
</div>

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

http://files.weikejianghu.com/file_images/article/201605/201605170855055.gif
图5:显示了每个类别的Name, Description和BrochurePath值

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

 

http://files.weikejianghu.com/file_images/article/201605/201605170855066.gif
图6:添加一个指向BrochurePath的HyperLinkField

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

http://files.weikejianghu.com/file_images/article/201605/201605170855067.gif
图7:点击“View Brochure”访问某类的Brochure

http://files.weikejianghu.com/file_images/article/201605/201605170855068.gif
图8:显示某类的PDF文件

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

  如图7所示,不管某个类的BrochurePath是否为NULL值,名为BrochurePath的HyperLinkField都呈现为其Text属性(“View Brochure”) 。当然,如果BrochurePath为NULL值,链接只显示为文本(而不带下划线),就像Seafood类一样(见图7)。与显示文本“View Brochure”相比,更为可取的是将那些BrochurePath值为空的类显示为“No Brochure Available”。

  为达此目的,我们需要用到TemplateField,使其产生一个基于BrochurePath值的合适的结果。我们先来看看如何实现,就像在教程之12《在GridView控件中使用TemplateField》一样。

  在“编辑列”对话框里选中名为BrochurePath的HyperLinkField,再点“Convert this field into a TemplateField”链接,将其转换为TemplateField。 

http://files.weikejianghu.com/file_images/article/201605/201605170855069.gif
图9:将HyperLinkField转换为TemplateField

  这样将创建一个TemplateField,其ItemTemplate模板包含一个HyperLink Web控件,该控件的NavigateUrl属性为BrochurePath值。用下面的代码将其替换掉:

<asp:TemplateField HeaderText="Brochure">
 <ItemTemplate>
 <%# GenerateBrochureLink(Eval("BrochurePath")) %>
 </ItemTemplate>
</asp:TemplateField>
</div>

  然后,在ASP.NET页面的“后台代码”里添加一个protected类型的GenerateBrochureLink方法,它接受一个输入参数并返回一个字符串。

protected string GenerateBrochureLink(object BrochurePath)
{
 if (Convert.IsDBNull(BrochurePath))
 return "No Brochure Available";
 else
 return string.Format(@"<a href=""{0}"">View Brochure</a>",
  ResolveUrl(BrochurePath.ToString()));
}
</div>

  该方法判断传入的值是否为NULL。如果是,则返回一个消息指出该类没有小册子文件;相反,如果传入值不为空,将显示为一个链接。我们注意到,当BrochurePath值不为空时

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ASP.NET core Web中使用appsettings.json配置文件的方法
  • ASP.NET webUploader上传大视频文件相关web.config配置
  • asp.net web页面自定义分页控件使用详解
  • ASP.NET程序发布详细过程
  • ASP.NET Web.config配置文件详解
  • ASP.NET web.config 配置节点详解
  • ASP.NET Web Api 2实现多文件打包并下载文件的实例
  • ASP.NET web.config中 数据库连接字符串加密解密
  • 在ASP.NET 2.0中操作数据之五十三:在Data Web控件显示二进制数据
  • 分享提高ASP.NET Web应用性能的技巧

相关文章

  • 2017-05-11压力测试中需要掌握的几个基本概念
  • 2017-05-11让Silverlight 2.0动画动起来Making Silverlight 2.0 animation Start(不能运动原因)
  • 2017-05-11ASP.NET中水晶报表的使用方法详解
  • 2017-05-11asp.net(c#)两种随机数的算法,可用抽考题
  • 2017-05-11asp.net 截取字符串代码
  • 2018-08-20MVC+EasyUI+三层新闻网站建立 实现登录功能(四)
  • 2018-08-20.NET Core 2.0如何生成图片验证码完整实例
  • 2017-05-11ASP.NET 调用百度搜索引擎的代码
  • 2017-05-11jquery repeater 模仿 Google 展开页面预览子视图
  • 2017-05-11巧用ASP.NET预编译Web应用程序规避调用延迟的方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 在dropDownList中实现既能输入一个新值又能实现下拉选的代码
    • asp.net保存网上图片到服务器的实例
    • C# Lambda表达式用途深入理解
    • C#调用动态unlha32.dll解压Lha后缀的打包文件分享
    • asp.net 导出到CSV文件乱码的问题
    • JWT + ASP.NET MVC时间戳防止重放攻击详解
    • C#Web应用程序入门经典学习笔记之一
    • [翻译]Scott Mitchell 的ASP.NET 2.0数据教程
    • asp.net 结合mysql存储过程进行分页代码
    • webapi中如何使用依赖注入

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有