.NET

RDLC系列(一)ASP.NET RDLC 报表自定义数据源

2017-02-27  本文已影响28人  疯子哦

最近一段时间开发ERP系统中要用到不少报表打印,在网上找了一圈发现想些好用的报表控件大部分要收费,一些面免费要么不好用要么IE8不兼容,最后还是用了微软自带的RDLC报表,把自己遇到的坑和技巧整理分享出来。

一般Visaul Studio上新建的的EDLC报表文件之后数据源都是按照向导直接连接数据库,自动生成数据源和数据集的,但是遇到一些复杂的就不够灵活。

一、新建报表

1.新建一个空白的报表如下

2.打开新建好的空报表文件,选择报表文件右键选择【打开方式】→【XML(文本)编辑】打开 在Page节点下面添加DataSources 和DataSets 节点

1)空报表文件

2)添加节点后

DataSources:数据源名称标签,每次加一个新的数据源需要在 DataSources 标签下新标签DataSource

DataSets:数据实体集合,每次新添加一个数据源后在DataSets 对应添加新的DataSet节点,DataSourceName和DataSetName 要和DataSource 的Name 名称一致。Fields 下面是添加每个实体对应的字段

3.报表DataSource和DataSet建好后可以看到刚才添加的数据源和数据集

4.设计好需要额报表,填充刚才数据集里对应的字段

5.后台数据源赋值代码

publicActionResult PrintProduct()

{stringreportPath = Server.MapPath("~/Reports/订单信息.rdlc");varlocalReport =newLocalReport { ReportPath =reportPath };

List productOrders =newList();for(inti =0; i <20; i++)

{

ProductOrder productOrder=newProductOrder

{

SKUDetail= $"A00300000{i}",

Quantity=i,

DeliveryDate= DateTime.Now.AddDays(i).ToString("yyyy-MM-dd HH:mm:ss"),

DeliveryDateActual= DateTime.Now.AddDays(i+1).ToString("yyyy-MM-dd HH:mm:ss")

};

productOrders.Add(productOrder);

}vardataSource =newReportDataSource("ProductOrderDs", productOrders);

localReport.DataSources.Add(dataSource);vartype ="PDF";stringreportType =type;stringmimeType;stringencoding;stringfileNameExtension;vardeviceInfo = $"{type}";

Warning[] warnings;string[] streams;varrenderedBytes =localReport.Render(

reportType,

deviceInfo,outmimeType,outencoding,outfileNameExtension,outstreams,outwarnings);returnFile(renderedBytes, mimeType);

}

实体代码:

publicclassProductOrder

{publicGuid ProductOrderId {get;set; }publicstringSKUDetail {get;set; }publicintQuantity {get;set; }publicstringDeliveryDate {get;set; }publicstringDeliveryDateActual {get;set; }publicstringBak {get;set; }

}

注意:报表文件DataSet中的用到的字段必须和实体字段对应,代码中DataSource 中名字必须和报表中的一样

最后预览如下:

出处:乐学网

上一篇下一篇

猜你喜欢

热点阅读