您的位置:首页 > 编程语言 > C#

c# 报表练习笔记二——父子报表 + 分组 + 图片

2013-03-15 17:30 155 查看
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);


留文,填充中...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: