Winfrom的ReportViewer报表控件和.rdlc后缀的报表绑定应用
1.创建一个winfrom项目,从工具箱添加ReportViewer控件,命名ReportViewer1

2.在项目中添加一个报表,命名Report1.rdlc

3.打开刚刚添加的报表,画出模板

4.添加一个数据集,用于报表绑定,命名DataSet1

5.在数据集中添加一个DataTable,命名DataTable1,有3列C1,C2,C3

6.在报表Report1.rdlc中添加数据集,命名DTTEST

7.在报表中绑定数据
数据类型有文本,图片等等,本例就讲解这两种如何绑定。
1).文本:3种方式绑定。
A.在文本属性-值-输入栏中直接输入[C2]
B.在文本属性-值-fx,输入=Fields!C2.Value
c..在文本属性-值-fx-数据集-DTTEST-First(C2)

2).图片
a.静态图片:图片属性,图像源选择嵌入,然后点击导入。

2).动态图片:例如二维码、条形码,原理:把图片转成byte[],byte[]再转成base64数字编码的等效字符串。
A.图片属性,图像源选择数据库,选择对应MIME类型image/jpeg,字段点击fx,输入=System.Convert.FromBase64String(Fields!C1.Value)

8.详细代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.Reporting.WinForms; using System.IO; using System.Drawing.Imaging; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { DataTable dt = new DataTable(); dt.Columns.Add("C1", typeof(string));//列名必须与数据集的列名一致 dt.Columns.Add("C2", typeof(string));//列名必须与数据集的列名一致 dt.Columns.Add("C3", typeof(string));//列名必须与数据集的列名一致 //动态图片绑定 string c = Convert.ToBase64String(ImageToBytes("F:\\wenbin\\工作文件\\SF\\LOGO\\顺丰logo简体.jpg")); dt.Rows.Add(c, "陈先生收", "深圳市"); //控件绑定报表 reportViewer1.LocalReport.ReportPath = @"F:\test\QueueTest\WindowsFormsApplication1\Report1.rdlc"; //报表绑定数据集 reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DTTEST", dt)); this.reportViewer1.RefreshReport(); } /// <summary> /// 将图片转成byte[] /// </summary> /// <param name="path">图片路径</param> /// <returns></returns> public byte[] ImageToBytes(string path) { Image image = Image.FromFile(path); //ImageFormat format = image.RawFormat; using (MemoryStream ms = new MemoryStream()) { image.Save(ms, image.RawFormat); byte[] buffer = new byte[ms.Length]; //ms.Position = 0;//ms.Seek(0, SeekOrigin.Begin); //ms.Read(buffer, 0, buffer.Length); buffer = ms.ToArray(); return buffer; } } /// <summary> /// 将byte[]转成图片 /// </summary> /// <param name="buffer">byte[]</param> /// <returns></returns> public Image BytesToImage(byte[] buffer) { MemoryStream ms = new MemoryStream(buffer); Image image = Image.FromStream(ms); return image; } } }


浙公网安备 33010602011771号