您的位置:首页 > 理论基础 > 计算机网络

实战 HTTP 处理程序(HTTP Handler) (6)---条码随意打

2007-09-05 09:11 585 查看
摘要

本文介绍一个免费的、完整的、very easy 的在Web页和RDLC报表中呈现、打印条码的解决方案。

效果

笔者最近遇到了一个B/S结构的项目,需要在报表中打印条码。效果如下

Default.aspx.cs

1 using System;

2 using System.Data;

3 using System.Configuration;

4 using System.Web;

5 using System.Web.Security;

6 using System.Web.UI;

7 using System.Web.UI.WebControls;

8 using System.Web.UI.WebControls.WebParts;

9 using System.Web.UI.HtmlControls;

10

11 using System.Collections.Generic;

12 using Microsoft.Reporting.WebForms;

13

14 public partial class _Default : System.Web.UI.Page

15 {

16 protected void Page_Load(object sender, EventArgs e)

17 {

18 // 为 GridView 设置数据源

19 GridView1.DataSource = VisitorTraffic.find_all();

20 GridView1.DataBind();

21

22 // 初始化报表

23 ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/Report.rdlc");

24 ReportViewer1.LocalReport.EnableExternalImages = true; // 允许使用外部图片

25

26 // 获取 MyHandler.jxd 的完整路径

27 string barcode_url = Request.Url.Scheme + "://"

28 + Request.Url.Authority

29 + Request.ApplicationPath

30 + "/MyHandler.jxd?data="; //-> "http://localhost:6344/HttpHandlerDemo/MyHandler.jxd?data="

31

32 // 将 MyHandler.jxd 的完整路径通过报表参数传给报表

33 ReportViewer1.LocalReport.SetParameters(new ReportParameter[] { new ReportParameter("barcode_url", barcode_url) });

34

35 // 为报表设置数据源

36 ReportViewer1.LocalReport.DataSources.Add(

37 new Microsoft.Reporting.WebForms.ReportDataSource("VisitorTraffic", VisitorTraffic.find_all()));

38 }

39 }

40

GridView 的设置基本保持第三篇的样子没变,在此就不在赘述了。下面着重介绍一下在RDLC报表里呈现条码的方法。在RDLC报表里使用外部图片,需要

- 在代码中将报表对象的 EnableExternalImages 属性设为 true。

- 将“图像”控件放置在表控件中。



- 将“图像”控件的“Source”属性设为“External”。

- 将“图像”控件的“Value”属性设为图片的地址。

在进行到上面的第四步(将“图像”控件的“Value”属性设为图片的地址)时,麻烦出现了。天杀的比尔居然要求在“Source”属性为“External”的情况下,“Value”必须以 http://, https://, ftp://, file:, mailto:, 或 news: 之一开头。换句话说,不允许我将Value设成 "~/MyHandler.jxd?data="+ Fields!visitor_traffic.Value 这种相对路径。可是我在RDLC里如何能得到 MyHandler.jxd 的完整路径呀?!我曾经试过不用图像控件,直接在“访问量”字段中写 "<img src='~/MyHandler.jxd?data=" + Fields!visitor_traffic.Value + "' />"。期望能骗过RDLC,直接输出IMG标记,结果RDLC十分智能地把所有的“ <”字符全部替换成了< 痛哭十分钟...

最后只好用了比较龌龊的方法:先在 Default.aspx.cs 中取得 MyHandler.jxd 的完整URL,然后通过报表参数(参数名为barcode_url)传递给RDLC报表对象(Default.aspx.cs 第26~33行)。而图像控件的Value属性就变成:Parameters!barcode_url.Value + Fields!visitor_traffic.Value

下载本篇全部源代码

本系列到此就结束了。我们并没有介绍太多HTTP处理程序的理论知识,对HTTP Handler的利用也仅仅局限于将它作为一个“虚拟页面”,您看得一定十分不过瘾吧 ?HTTP 处理程序的另外一个重要的应用是实现URL重写,Scott Mitchell 的 《URL Rewriting in ASP.NET》对这个主题进行了深入的探讨,并给出了一个完整的解决方案。《ASP.NET 2.0高级编程》一书有对HTTP模块的详细描述,可以在线免费试读。希望本系列可以作为您通往精通HTTP处理技术之路的第一块垫脚石,再见。

本系列共6篇文章

实战 HTTP 处理程序(HTTP Handler) (6)——条码随意打 <- you are here.

实战 HTTP 处理程序(HTTP Handler) (5)——不用临时文件,直接打开动态生成的文件

实战 HTTP 处理程序(HTTP Handler) (4)——与Web程序共享Session

实战 HTTP 处理程序(HTTP Handler) (3)——动态生成图片

实战 HTTP 处理程序(HTTP Handler) (2)——向HTTP 处理程序传递参数

实战 HTTP 处理程序(HTTP Handler) (1)——创建一个最简单的 HTTP Handler
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐