目录

描述
文件列表
步骤
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();
                }
  
                后面的部分省略……

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

  1. 利用数据集在水晶报表中显示图像

    描述 该 C# .NET Windows 程序演示了如何创建数据集,并将图像添加到数据集,以及在运行时将数据集传递到子报表. 文件列表 - bin\Debug\Canada.jpg - bin\Deb ...

  2. 在水晶报表中实现任意选择指定字段显示-模板及C#升级版

    前文<在水晶报表中实现任意选择指定字段显示>中有朋友留言说是有无C#版本,最近有时间,重写了一下. 一是使用了VS2005 C#2.0 + Crystal Report 2008,另外就是 ...

  3. 水晶报表中如何创建自定义的纸张大小格式?

    问题 水晶报表中使用一个自定义的纸张类型格式(使用预先定义的纸张格式显示或者打印一个报表)? 解决方法 要创建一个自定义的纸张格式,来完成你工作中所使用的特殊纸张.在你开始工作之前,你必须确认你的打印 ...

  4. 在水晶报表中动态显示任意格式的图片

    在水晶报表中动态显示任意格式的图片 如何在水晶报表中动态显示任意格式的图片        前段时间,Accounting 项目内需要在水晶报表中动态显示任意格式的图片.但是,水晶报表只支持OleDb的 ...

  5. 在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 二十四桥明月夜, 玉人何处教吹箫. ...

  6. 解决水晶报表中动态加载的图片或利用水晶报表创建的图表不显示图片的方法

    开发水晶报表时在利用其创建图表时在IIS服务器图片不显示,解决方法如下: 在解决方案资源管理器->web项目-->右键 属性页,把多余的 引用 移除就可以了(注意版本),例如VS2005版 ...

  7. 水晶报表中对某一栏位值进行处理_终于有人讲清楚了,BI和报表的差异!

    IT系统自带报表功能,为什么还要额外采购BI? 报表和BI都能做数据分析,区别在哪里? 加班加点做了那么多表,为什么还不满足老板需求? 报表分析需要IT团队来开发,那BI呢? 这些应该是大家对商业智能 ...

  8. winform水晶报表中添加图片

    文章目录 前言 一.VS中找不到ReportView 二.使用步骤 1.直接拉取控件到窗体 ​编辑 2.添加参数 总结 前言 应用场景:在做一个巡检机器人项目时,对于巡检结果,需要在Winform端显 ...

  9. 水晶报表中让行高自适应高度(即根据内容的来适应高度)

    1.在水晶报表打印中,有些内容可能占两行.三行.四行内容,但有些内容仅占一行内容,如果固定行高,会造成纸张的很大的浪费,如下图所示 2.如上图所示,零件型号.名称.规格三列超出一行内容,怎么让内容自适 ...

最新文章

  1. 安装PHP7.3.2make编译出现报错,内存不足导致,临时解决方法
  2. FastJson 转换 javaBean 时 null 值被忽略都问题
  3. python可选参数位置_每个位置参数的可选参数
  4. kali Linux/centos7 Linux设置不会屏保
  5. selenium 4_Selenium4 Alpha –期望什么?
  6. 花旗linux 内核 如何调试,揭秘首个运行在Linux平台的核心银行系统
  7. 安装和卸载mysql
  8. PHP抽象函数的依赖注入,laravel 抽象类实现接口,具体类继承抽象类,使用依赖注入,如何知道接口选择的是哪个具体实现类啊?...
  9. es集群节点数和分片数关系_ES数据插入和查询流程是怎么样的?
  10. 又是系统时间惹的祸 TreeView
  11. 全是大事:百度华为联手搞AI;滴滴再融40亿美元也说搞AI
  12. python自动发邮件mysql_python自动化六--操作mysql,redis,发送邮件,EXCEL,MD5加密
  13. new方法、定制属性、描述符、装饰器
  14. python 员工考勤_python-01实现考勤表添加与删除
  15. 二、博客首页完成《iVX低代码仿CSDN个人博客制作》
  16. Pytorch报错解决:The size of tensor a (4) must match the size of tensor b (3) at non-singleton dimensio
  17. WPS word编辑图表数据的正确姿态
  18. 一个STAF的RC21的问题的解决和思考
  19. 支持Apple Music无损音频的耳机型号以及iPhone、iPad
  20. 基于Springboot的网上商城

热门文章

  1. java 之动态生成类
  2. 为找房方便,将sohu房产的rss 转成全文的!
  3. [论文学习]TDN: An Integrated Representation Learning Model of Knowledge Graphs
  4. 大型语言模型的推理演算
  5. java文件批量下载打包成zip
  6. 第一个iOS应用 —— Hello world!
  7. 每页多张幻灯片密集打印的设置技巧
  8. 神州优车上云之路:如何在效率、质量和成本三方面达到平衡?
  9. 本地文件共享到云服务器,本地和云服务器文件共享
  10. IOT连接阿里云(一):调试MQTT通路