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;
        }
    }
}

 

posted @ 2017-01-16 14:40  花生打代码会头痛  阅读(782)  评论(0)    收藏  举报