zoukankan      html  css  js  c++  java
  • c# 报表练习笔记二——父子报表 + 分组 + 图片

    rdlc里面,如果删除了组属性,行的属性没有分组的话,此行仅显示一行。只有行为组的情况下,行才会多行显示数据。

    父子报表的重点在两个报表的数据关联上。

    在子报表属性的参数中加入一个参数“姓名”,参数值=“=Fields!姓名.Value”。

    :打开子报表,在报表属性中加入一个报表参数“姓名”,这个参数与上一步设置的参数同名。

    :在子报表中加入表格控件,表的属性中的筛选器加入“=Fields!姓名.Value”=“=Parameters!姓名.Value”。

    界面的后台数据绑定关键在事件SubreportProcessing的赋值,是对子报表数据的绑定:

    using (var ds = new DataSet())
    {
        ds.ReadXml("ReportSubRep\\SubResult.xml");
    
        reportViewer1.ProcessingMode = ProcessingMode.Local;
        reportViewer1.LocalReport.ReportPath = "ReportSubRep\\ReportSubRep.rdlc";
        ReportDataSource dataSource1 = new ReportDataSource("dsMain", ds.Tables["Main"]);
        ReportDataSource dataSource2 = new ReportDataSource("dsDetail", ds.Tables["Detail"]);
        reportViewer1.LocalReport.SubreportProcessing += (a, b) => b.DataSources.Add(dataSource2);
        reportViewer1.LocalReport.DataSources.Add(dataSource1);
        reportViewer1.RefreshReport();
    }

    分组可以理解成将数据按某个关键字分组,类似与Group<string,List<object>>的结构,分组之后,相同的属性值就只有一个结果。分组+父子报表可以做出以下效果:

    rdlc添加图片,

    在rdlc的编辑中,从工具栏拖动“图像”到表格,“图像源...”有三个选项,“嵌入”、“外部”、“数据库”。嵌入比较简单,导入一个图像即可。“外部”则可以在显示报表的客户端指定图像的来源,图像已经生成,存储在本地或者网络。“数据库”则可以传递Base64String格式的图像数据进来。

    “外部”:选择外部图像时,可以在报表中新建一个参数,例如LogoUrl,将"外部"图像的"使用此图像"指向这个参数。在cs文件里面往rdlc绑定数据时注意,加上这两行代码,绑定图像数据源,可以绑定网络数据源。

    reportViewer1.LocalReport.EnableExternalImages = true;
    reportViewer1.LocalReport.SetParameters(new ReportParameter("LogoUrl", 
        "file:///" + AppDomain.CurrentDomain.BaseDirectory + "Report\\logo.png"));

    “数据库”:当图片在内存中,没必要保存到硬盘中,可以选择这种。有几点主要的:

    1.将生成的bitmap转成Base64String,

    //Bitmap转byte[]  
    public static byte[] BitmapToBytes(this Bitmap bitmap)
    {
        if (bitmap == null) return null;
        using (MemoryStream ms = new MemoryStream())
        {
            try
            {
                bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
                //Bitmap.Save(ms, Bitmap.RawFormat);
                byte[] byteImage = new Byte[ms.Length];
                byteImage = ms.ToArray();
                return byteImage;
            }
            catch (Exception)
            {
    
                throw;
            }
        }
    }
    
    public static string BitmapToBase64String(this Bitmap bitmap)
    {
        return Convert.ToBase64String(BitmapToBytes(bitmap));
    }

    2.“数据库”图像时,上步中的bitmap转bytes时,格式为Bmp,所以数据库图像的“使用此MIME类型”选择“image/bmp”。

    3.将bitmap.BitmapToBase64String()传递给图像对应的表格字段就可以了。

    补充一点,生成一个bitmap可以用以下代码:

    Point[] points = GetPoints(xy).ToArray();
    Bitmap res = new Bitmap(200, 200);
    Graphics g = Graphics.FromImage(res);
    g.Clear(Color.White);
    g.DrawLines(Pens.Red, points);

    留文,填充中...

  • 相关阅读:
    没穿过几次的衬衫,发黄了!郁闷ing!
    delta3d与ode物理引擎的结合。
    PIMPL 模式的实现及应用。
    互联网搜索广告介绍(一)
    Windows Phone 7的Launchers&Choosers简介及其行为浅析
    Windows Phone 7的屏幕方向及变更处理
    Windows Phone 7常用资源大集合
    Windows Phone 7 Developer Tools 更新指南
    html 5简易的影片播放器(高手绕行)
    App Inventor for Android Button单击事件
  • 原文地址:https://www.cnblogs.com/icyJ/p/rdlc.html
Copyright © 2011-2022 走看看