首页
最近更新
热门教程
ASP.NET
开发语言
开发环境
AJax教程
控件开发
统计报表
数据库
Web服务
安装部署
HTML教程
Javascript
XML教程
Community Server
NHibernate
书籍推荐
常用工具
实用代码
教程全文搜索
首页
>>
ASP.NET
实战HTTP Handler (6) -- 条码随意打
添加人:
vs2005
添加时间:2007-09-05 阅读次数:2964
收藏此教程
为了使用RDLC报表,我们的数据源由第三篇中的数组改成了一个Domain Object:
VisitorTraffic.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
using
System.Collections.Generic;
11
/**/
///
<summary>
12
///
VisitorTraffic 的摘要说明
13
///
</summary>
14
public
class
VisitorTraffic
15
{
16
private
string
_website_name;
17
private
string
_visitor_traffic;
18
public
static
List
<
VisitorTraffic
>
find_all()
19
{
20
List
<
VisitorTraffic
>
result
=
new
List
<
VisitorTraffic
>
();
21
result.Add(
new
VisitorTraffic(
"
1. 使用分治法实现的全排列算法
"
,
"
50
"
));
22
result.Add(
new
VisitorTraffic(
"
2. 让Ruby的数组支持任意起始下标
"
,
"
16
"
));
23
result.Add(
new
VisitorTraffic(
"
3. 输出二叉树的方法
"
,
"
14
"
));
24
return
result;
25
}
26
public
VisitorTraffic(
string
website_name,
string
visitor_traffic)
27
{
28
_website_name
=
website_name;
29
_visitor_traffic
=
visitor_traffic;
30
}
31
public
string
website_name
32
{
33
get
{
return
_website_name; }
34
set
{ _website_name
=
value; }
35
}
36
public
string
visitor_traffic
37
{
38
get
{
return
_visitor_traffic; }
39
set
{ _visitor_traffic
=
value; }
40
}
41
}
VisitorTraffic 类的两个属性 website_name 和 visitor_traffic 分别表示网页名称和访问量。静态函数 find_all() 通过硬编码的方式返回3条有用的数据。VisitorTraffic 类放置在Web应用程序的 App_Code 文件夹下。
Default.aspx 中放置一个 GridView 控件和和一个 ReportViewer 控件。在Page_Load() 时初始化这两个控件。
Default.aspx
1
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Default.aspx.cs
"
Inherits
=
"
_Default
"
%>
2
<%
@ Register Assembly
=
"
Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
"
3
Namespace
=
"
Microsoft.Reporting.WebForms
"
TagPrefix
=
"
rsweb
"
%>
4
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
5
<
html
xmlns
="http://www.w3.org/1999/xhtml"
>
6
<
head
runat
="server"
>
7
<
title
>
无标题页
</
title
>
8
</
head
>
9
<
body
>
10
<
form
id
="form1"
runat
="server"
>
11
<
div
>
12
<
asp:Label
ID
="Label2"
runat
="server"
Font-Bold
="True"
ForeColor
="#0000C0"
Text
="GridView:"
></
asp:Label
>
13
<
asp:GridView
ID
="GridView1"
runat
="server"
AutoGenerateColumns
="False"
CellPadding
="3"
14
GridLines
="Vertical"
BackColor
="White"
BorderColor
="#999999"
BorderStyle
="None"
15
BorderWidth
="1px"
>
16
<
FooterStyle
BackColor
="#CCCCCC"
ForeColor
="Black"
/>
17
<
Columns
>
18
<
asp:TemplateField
HeaderText
="网址"
>
19
<
ItemTemplate
>
20
<
asp:Label
ID
="Label1"
runat
="server"
Text
='<%#
Eval("website_name") %
>
'>
</
asp:Label
>
21
</
ItemTemplate
>
22
</
asp:TemplateField
>
23
<
asp:TemplateField
HeaderText
="访问量"
>
24
<
ItemTemplate
>
25
<
asp:Image
ID
="Image1"
runat
="server"
ImageUrl
='<%#
"~/MyHandler.jxd?data
=" + Eval("
visitor_traffic") %
>
' />
26
</
ItemTemplate
>
27
</
asp:TemplateField
>
28
</
Columns
>
29
<
RowStyle
BackColor
="#EEEEEE"
ForeColor
="Black"
/>
30
<
SelectedRowStyle
BackColor
="#008A8C"
Font-Bold
="True"
ForeColor
="White"
/>
31
<
PagerStyle
BackColor
="#999999"
ForeColor
="Black"
HorizontalAlign
="Center"
/>
32
<
HeaderStyle
BackColor
="#000084"
Font-Bold
="True"
ForeColor
="White"
/>
33
<
AlternatingRowStyle
BackColor
="#DCDCDC"
/>
34
</
asp:GridView
>
35
<
br
/>
36
<
asp:Label
ID
="Label3"
runat
="server"
Font-Bold
="True"
ForeColor
="#0000C0"
Text
="RDLC 报表:"
></
asp:Label
>
37
<
rsweb:ReportViewer
ID
="ReportViewer1"
runat
="server"
Width
="443px"
>
38
</
rsweb:ReportViewer
>
39
</
div
>
40
</
form
>
41
</
body
>
42
</
html
>
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
using
System.Collections.Generic;
11
using
Microsoft.Reporting.WebForms;
12
public
partial
class
_Default : System.Web.UI.Page
13
{
14
protected
void
Page_Load(
object
sender, EventArgs e)
15
{
16
//
为 GridView 设置数据源
17
GridView1.DataSource
=
VisitorTraffic.find_all();
18
GridView1.DataBind();
19
//
初始化报表
20
ReportViewer1.LocalReport.ReportPath
=
Server.MapPath(
"
~/Report.rdlc
"
);
21
ReportViewer1.LocalReport.EnableExternalImages
=
true
;
//
允许使用外部图片
22
//
获取 MyHandler.jxd 的完整路径
23
string
barcode_url
=
Request.Url.Scheme
+
"
://
"
24
+
Request.Url.Authority
25
+
Request.ApplicationPath
26
+
"
/MyHandler.jxd?data=
"
;
//
-> "
http://localhost
:6344/HttpHandlerDemo/MyHandler.jxd?data="
27
//
将 MyHandler.jxd 的完整路径通过报表参数传给报表
28
ReportViewer1.LocalReport.SetParameters(
new
ReportParameter[]
{
new
ReportParameter(
"
barcode_url
"
, barcode_url) }
);
29
//
为报表设置数据源
30
ReportViewer1.LocalReport.DataSources.Add(
31
new
Microsoft.Reporting.WebForms.ReportDataSource(
"
VisitorTraffic
"
, VisitorTraffic.find_all()));
32
}
33
}
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处理技术之路的第一块垫脚石,再见。
实战HTTP Handler (1) -- 创建一个最简单的HTTP Handler
实战HTTP Handler (2) -- 向HTTP 处理程序传递参数
实战HTTP Handler (3) -- 动态生成图片
实战HTTP Handler (4) -- 与Web程序共享Session
实战HTTP Handler (5) -- 不用临时文件,直接打开动态生成的文件
共
2
页 第
2
页
上一页
1
2
下一页
相关的教程:
条形码
HTTP Handler
收藏此教程
Currently.-0.05/5
-5
-4
-3
-2
-1
0
1
2
3
4
5
当前平均分:
-2.3
(
3
次打分)
-5
-4
-3
-2
-1
0
1
2
3
4
5
推荐阅读
ASP.NET中生成条形码
实战HTTP Handler (1) -- 创建一个最简单的HTTP Handler
实战HTTP Handler (3) -- 动态生成图片
实战HTTP Handler (4) -- 与Web程序共享Session
实战HTTP Handler (5) -- 不用临时文件,直接打开动态生成的文件
实战HTTP Handler (5) -- 不用临时文件,直接打开动态生成的文件
实战HTTP Handler (3) -- 动态生成图片
实战HTTP Handler (4) -- 与Web程序共享Session
实战HTTP Handler (2) -- 向HTTP 处理程序传递参数
实战HTTP Handler (1) -- 创建一个最简单的HTTP Handler
添加评论
评论主题
您的大名
您的评论
验证码
评论列表
ASP.NET论坛
|
网站帮助
|
加入收藏
知识库搜索:
用户信息
欢迎您,游客。
登录
|
注册
为什么要注册?
马上加入GotAspx,建立自己的知识库,与大家分享您的知识库,还可获得丰厚积分奖励!
本类热门
从零开始学ASP.NET(基础篇)
ASP.NET 2.0轻松实现数据库应用开发
ASP.NET 程序中常用的三十三种代码
GridView 72般绝技(一)
对初学者的建议:ASP.NET技术的学习顺序
单点登录在ASP.NET上的简单实现
ASP.NET数据库编程快速入门之技术慨述
ASP.NET 2.0中构造个性化网页
本类最新
介绍SubSonic【转】
ASP.NET访问XML的例子
WEB开发者版本级别
基于.NET2.0的System.Net.Mail发送邮件Demo
Asp.Net 文件操作基类(读取,删除,批量拷贝,批量删除,写入)
c#生成与 追加xml
一个复杂的Eval()绑定
将服务器上的一个.doc文档另存为到客户端