分享
 
 
 

利用数据集在水晶报表中显示图像的 .NET 程序教程

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

目录

描述

文件列表

步骤

Form1.cs

VB.NET 版

描述

该 C# .NET Windows 程序演示了如何创建数据集,并将图像添加到数据集,以及在运行时将数据集传递到子报表。

文件列表

- bin\Debug\Canada.jpg

- bin\Debug\Germany.jpg

- bin\Debug\Japan.jpg

- bin\Debug\USA.jpg

- App.ico

- AssemblyInfo.cs

- CrystalReport1.cs

- CrystalReport1.rpt

- DynamicImage.csproj

- DynamicImage.csproj.user

- DynamicImage.sln

- Form1.cs

- Form1.resx

- Readme.txt

- Steps.txt

步骤

* 开始一个新项目/创建数据集及其模式

- 新建项目

- 转到 Form1.cs 后置的代码

- Imports System.Data/System.IO

- 创建函数 "CreateData",以创建数据集:

DataSet CreateData()

{

DataSet data = new DataSet();

data.Tables.Add("Images");

data.Tables[0].Columns.Add("Country", System.Type.GetType("System.String"));

data.Tables[0].Columns.Add("img", System.Type.GetType("System.Byte[]"));

data.WriteXmlSchema(Directory.GetCurrentDirectory() + "\DynamicImage.xsd");

}

- 创建函数 "CreateReport",以调用 CreateData 创建数据集模式:

void CreateReport()

{

CreateData();

}

- 在构造函数中调用 CreateReport

public Form1()

{

//

// Required for Windows Form Designer support

//

InitializeComponent();

//

// TODO: Add any constructor code after InitializeComponent call

//

CreateReport();

}

- 构造并执行程序/将在 Bin\Debug 文件夹中创建 DynamicImage.xsd。

* 设计报表

- 项目->添加新项

- 选择 Crystal Report,并单击“打开”

- 选择“作为空白报表”,并单击“确定”

- 右击任意空白处,选择“数据库->添加/删除数据库”

- 展开 ODBC (RDO),选择 Xtreme Sample Database,并单击“完成”。

- 展开表,双击 Customer

- 单击“确定”

- 将 Customer Name 和 Last Year's Sales 拖放到详细资料

- 右击任意空白处,插入->子报表

- 将子报表放置在 Last Year's Sales 旁边

- 选择“创建子报表”,并将子报表命名为 "Flags",单击“报表专家”

- 扩展“更多数据源”,选择 ADO.NET (XML)

- 找到 DynamicImage.xsd,并单击“完成”

- 双击 Images

- 单击“下一步”,双击 img,单击“完成”

- 单击“链接”选项卡

- 双击 Country,并单击“确定”

- 调整子报表的大小

- 在子报表上双击,以打开子报表

- 删除报表页眉 b 和报表页脚 b

- 右击 -> 关闭子报表

* 回到代码,并编写 Crystal 代码

- 将 CrystalReportViewer 控件拖放到窗体 Form1

- 选择 CrystalReportViewer1,F4(属性)

- 改变 Dock 属性,填充

- 查看代码

- 注释掉 WriteXmlSchema(因为只在设计报表时需要数据集模式文件)

- 在 CreateData 函数中组装数据集,并将其返回

void AddImageRow(DataTable tbl, string name, string filename)

{

FileStream fs = new FileStream(filename, FileMode.Open);

BinaryReader br = new BinaryReader(fs);

DataRow row;

row = tbl.NewRow();

row[0] = name;

row[1] = br.ReadBytes((int)br.BaseStream.Length);

tbl.Rows.Add(row);

br = null;

fs = null;

}

DataSet CreateData()

{

DataSet data = new DataSet();

data.Tables.Add("Images");

data.Tables[0].Columns.Add("Country", System.Type.GetType("System.String"));

data.Tables[0].Columns.Add("img", System.Type.GetType("System.Byte[]"));

//data.WriteXmlSchema(Directory.GetCurrentDirectory() + "\DynamicImage.xsd");

AddImageRow(data.Tables[0], "USA", Directory.GetCurrentDirectory() + "\USA.jpg");

AddImageRow(data.Tables[0], "Canada", Directory.GetCurrentDirectory() + "\Canada.jpg");

AddImageRow(data.Tables[0], "Germany", Directory.GetCurrentDirectory() + "\Germany.jpg");

AddImageRow(data.Tables[0], "Japan", Directory.GetCurrentDirectory() + "\Japan.jpg");

return (data);

}

- 创建报表文档,将数据集传递到子报表,并将报表绑定到水晶报表查看器:

void CreateReport()

{

CrystalReport1 cr = new CrystalReport1();

cr.OpenSubreport("Flags").SetDataSource(CreateData());

crystalReportViewer1.ReportSource = cr;

}

Form1.cs

using System;

using System.Drawing;

using System.Collections;

using System.ComponentModel;

using System.Windows.Forms;

using System.Data;

using System.IO;

namespace DynamicImage

{

/// <summary>

/// Summary description for Form1.

/// </summary>

public class Form1 : System.Windows.Forms.Form

{

private CrystalDecisions.Windows.Forms.CrystalReportViewer crystalReportViewer1;

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null;

// 过程: AddImageRow

// 读取图像文件,并将其添加到数据集的表中

//

// [in] tbl 数据表

// country 国家名

// filename 图像的文件名

//

void AddImageRow(DataTable tbl, string name, string filename)

{

FileStream fs = new FileStream(filename, FileMode.Open); // 创建文件流

BinaryReader br = new BinaryReader(fs); // 创建二进制读取器

DataRow row;

// 创建一个新的数据行

row = tbl.NewRow();

// 设置 country 字段和 image 字段

row[0] = name;

row[1] = br.ReadBytes((int)br.BaseStream.Length);

// 将数据行添加到表中

tbl.Rows.Add(row);

// 清除

br = null;

fs = null;

}

// 函数: CreateData

// 创建数据集,包含一个表,表有两个字段:Country (string), 和 img (blob/byte[])

// 为表添加四条记录

//

DataSet CreateData()

{

DataSet data = new DataSet();

// 将表 'Images' 添加到数据集

data.Tables.Add("Images");

// 添加两个字段

data.Tables[0].Columns.Add("Country", System.Type.GetType("System.String"));

data.Tables[0].Columns.Add("img", System.Type.GetType("System.Byte[]"));

// 创建数据集模式(该模式用于设计报表)

// 报表创建以后,不再需要模式文件

//data.WriteXmlSchema(Directory.GetCurrentDirectory() + "\DynamicImage.xsd");

// 添加四行

AddImageRow(data.Tables[0], "USA", Directory.GetCurrentDirectory() + "\USA.jpg");

AddImageRow(data.Tables[0], "Canada", Directory.GetCurrentDirectory() + "\Canada.jpg");

AddImageRow(data.Tables[0], "Germany", Directory.GetCurrentDirectory() + "\Germany.jpg");

AddImageRow(data.Tables[0], "Japan", Directory.GetCurrentDirectory() + "\Japan.jpg");

return (data);

}

// 过程: CreateReport

// 创建报表,并传递数据集

//

void CreateReport()

{

// 创建报表

CrystalReport1 cr = new CrystalReport1();

// 将数据集(通过调用函数 CreateData 创建的)传递到子报表 "Flags"

cr.OpenSubreport("Flags").SetDataSource(CreateData());

// 将报表文档传递到查看器

crystalReportViewer1.ReportSource = cr;

}

public Form1()

{

//

// Required for Windows Form Designer support

//

InitializeComponent();

//

// TODO: Add any constructor code after InitializeComponent call

//

CreateReport();

}

后面的部分省略……

VB.NET 版

http://ftp1.businessobjects.com/outgoing/products/Devzone/vbnet_win_DynamicImage.zip

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有