锐浪报表加载List泛型数据

个人比较喜欢使用Dapper抓取数据,该ORM抓取到的都是List泛型对象,但锐浪官方的例子都是DataTable加载记录集,所以我就写了一个List泛型加载记录集的方法,供一些和我一样的小菜参考,有问题可以拍砖,谢谢.

  • List泛型加载锐浪数据集

public class GridReportHelper
    {
        private struct MatchFieldPairType
        {
            public IGRField grField;
            public int MatchColumnIndex;
        }
        //List加载数据集
        public static void FillRecordToReport<T>(IGridppReport Report, List<T> listT)
        {

            Type type = typeof(T);  //反射类型             

            MatchFieldPairType[] MatchFieldPairs = new MatchFieldPairType[Math.Min(Report.DetailGrid.Recordset.Fields.Count, type.GetProperties().Length)];

            //根据字段名称与列名称进行匹配,建立DataReader字段与Grid++Report记录集的字段之间的对应关系
            int MatchFieldCount = 0;
            int i = 0;
            MemberInfo[] members = type.GetMembers();
            foreach (MemberInfo memberInfo in members)
            {
                foreach (IGRField fld in Report.DetailGrid.Recordset.Fields)
                {
                    if (String.Compare(fld.Name, memberInfo.Name, true) == 0)
                    {
                        MatchFieldPairs[MatchFieldCount].grField = fld;
                        MatchFieldPairs[MatchFieldCount].MatchColumnIndex = i;
                        ++MatchFieldCount;
                        break;
                    }
                }
                ++i;
            }

            Helper.StringHelper stringhelper = new StringHelper();      //定义string帮助类
            // 将 DataTable 中的每一条记录转储到 Grid++Report 的数据集中去
            foreach (T t in listT)
            {
                Report.DetailGrid.Recordset.Append();

                for ( i = 0; i < MatchFieldCount; ++i)
                {
                    if (stringhelper.GetValue<T>(t, MatchFieldPairs[i].grField.Name) != null)
                        MatchFieldPairs[i].grField.Value = stringhelper.GetValue<T>(t, MatchFieldPairs[i].grField.Name);
                }

                Report.DetailGrid.Recordset.Post();
            }
        }
        
    }
  • 第一步: 定义Grid++Report报表主对象 

 private GridppReport Report = new GridppReport();
  •  第二步:加载报表模板 

Report.LoadFromFile(inifilehelper.ReadValue("ZSLablePrint", "ReportPath"));
  • 第三步:加载报表事件              

Report.PrintAsDesignPaper = true;       //打印设置与设计页面一致
//连接报表取数事件
Report.FetchRecord -= new _IGridppReportEvents_FetchRecordEventHandler(ReportFetchRecord);
Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReportFetchRecord);
Report.PrintEnd += new _IGridppReportEvents_PrintEndEventHandler(Report_PrintEnd);

                
Report.Printer.DesignPrinterName = inifilehelper.ReadValue("ZSLablePrint", "PrinterName"); //默认打印机名称
Report.Printer.PaperName = inifilehelper.ReadValue("ZSLablePrint", "PaperName");

简要说明: 

FetchRecordEventHandler事件需要先删除后再加载,是避免数据集重复加载的问题,

PrintEndEventHandler是加载打印后事件,例如打印后记录打印次数。

  • 第四步: 报表预览

Report.PrintPreview(true);
  • 附记录加载方法和打印后事件
/// <summary>
/// 动态加载list
/// </summary>
private void ReportFetchRecord()
{
	List<Model.AL_LablesZS> listlableszs = new List<Model.AL_LablesZS>();       
	Model.AL_LablesZS lableszs = new Model.AL_LablesZS(); //定义标签对象
	string strSQL = @"SELECT * FROM AL_LablesZS WHERE ID = @ID";
	lableszs = Helper.DapperHelper.GetFirstOrDefault<Model.AL_LablesZS>(strSQL, new { ID = id });

	int x = lableszs.FAuxQty;
	int y = lableszs.PackageQty;
	//判断打印标签数量,每次打印最多10张,避免没有更改每包数量的问题
	if (x/y > 10)
	{
		MessageBox.Show("每次标签打印数量不能超过10张,烦请确定【每包数量】及【生产数量】");
		return;
	}

	int i = 0;              //定义序号变量
	//添加数据集
	while (x>0)
	{
		i = i + 1;
		Model.AL_LablesZS tmp = new Model.AL_LablesZS(); //定义标签对象
		tmp = Helper.ObjectHelper.TransReflection<Model.AL_LablesZS, Model.AL_LablesZS>(lableszs);
		tmp.FBatch2 = tmp.FBatch2 + i.ToString();       //生产批号2最后一位序号自动增加.
		tmp.GUID = tmp.ID.ToString() + "-" + (100 + i).ToString() + DateTime.Now.ToString("HHmmssfff") + "-" + tmp.CZFBatchNo;

		if (x>y)     //生产数量大于包装数量
		{
			listlableszs.Add(tmp);     //添加一个对象
			x = x - y;                      //添加完成后减少该包装数量
			continue;                       //继续下一循环
		}
		else
		{
			tmp.PackageQty = x;        //如果不足包装数量时,则包装数量等于剩余数量
			listlableszs.Add(tmp);
			break;                              //退出循环
		}

	}

	//自动填充报表数据集
	Helper.GridReportHelper.FillRecordToReport<Model.AL_LablesZS>(Report, listlableszs);


}
/// <summary>
/// 报表打印结束后事件
/// </summary>
private void Report_PrintEnd()
{         
	Model.AL_LablesZS lableszs = new Model.AL_LablesZS(); //定义标签对象
	string strSQL = @"UPDATE AL_LablesZS SET PrintUser = @PrintUser,PrintTime = @PrintTime,
								PrintCount = PrintCount + 1 WHERE ID = @ID";
	lableszs.ID = id;       
	lableszs.PrintUser = Helper.DapperHelper.username.UserName;         //当前用户
	lableszs.PrintTime = DateTime.Now;
	Helper.DapperHelper.ExecuteWithTrans(strSQL, lableszs);

}
#endregion

               

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Grid++Report是一款C/S与B/S集成报表工具,功能全面易学易用。C/S开发适用于VB.NET, C#, VB, VC, Delphi, BCB, 易语言等。B/S开发适用于ASP.NET, ASP, PHP, JSP(Java)等,支持所有操作系统服务器与WEB服务器。开发C/S报表与B/S报表共享相同的开发知识与设计资源。提供独有的报表查询显示功能,让报表查询显示、打印、打印预览及数据导出等功能集成一体化实现。轻松实现表格报表、动态报表、多层表头、票据套打、交叉表、统计图表、表中表及各种特殊报表等,是中式报表的最佳开发工具。提供详尽帮助文档与各种编程平台下的丰富例子,安装中包括可直接运行例子程序,安装后即刻体验此报表工具。Unicode编码,多国语言集成支持。历经数年发展,多家有影响力的通用软件厂商选用,用户遍布各行各业,已经成为用户受众面最广的国产报表工具。 Grid++Report 报表组件具有如下特点: 1、支持C/S报表与B/S报表开发,支持全部主流开发语言。C/S开发:VB.NET、C#、VB、VC、Delphi等,B/S开发:ASP.NET、ASP、PHP、JSP等,支持所有WEB服务器。 2、多国语言集成支持与UNICODE编码支持,方便开发多国语言软件。 3、功能强大,稳定高效:实现表格报表、多层表头、票据套打、交叉表等各种报表非常简便;报表完全可编程定义,适合开发通用软件中的动态报表。 4、独有的报表查询显示功能:提供报表查询与输出的集成一次性实现,保证数据不同展现方式的一致性与完整性。 5、报表数据来源丰富:支持绑定(报表数据拉模式)与非绑定(报表数据推模式),一切数据数据与其它数据都可以作为报表数据源。 6、提供图表功能,包括:饼图、叠加饼图、柱状图、气泡图、折线图、曲线图、散列点图等,支持三维图形。 7、报表数据导出格式丰富,格式包括:Excel、RTF、PDF、图像、HTML、文本,CSV 等。 8、支持数十种一维条码,支持PDF417与QRCode这两种最常用的二维条码,条码打印精度高且易读取。 9、提供脚本编程功能,直接在报表模板中自定义报表行为,采用通用的JScript与VBScript脚本引擎。 10、特有的分组单元格合并功能,轻松实现常见的中国式报表分组在列中展现并垂直居中要求。 11、全中文界面,针对中国式报表进行了很多专门实现,如:表格报表、财务金额线、大写金额、发票圈叉图标、负数红字、多层表头等。很多在国外报表工具中很难实现的功能都可以轻易实现。 12、提供丰富交互事件,轻松实现报表行为自定义、穿透(透视)查询和报表交互。 13、重新发布简单:C/S报表只需分发两个DLL文件;B/S报表只要在WEB服务器布署报表网页与报表插件安装包,服务端不需其它配置,客户端零配置。 14、易学易用:完全可视化设计,完善的复制/剪切/粘贴(Copy/Cut/Paste)和恢复重做(Undo/Redo)功能,专业的拖放操作与即时编辑功能。 15、编写了完整详尽的帮助文档。提供了丰富例程,C/S报表包括VB.NET、C#、VB、VC、Delphi、C++Builder、VFP、中文编程易语言,B/S报表包括ASP.NET,ASP,PHP,JSP。 Grid++Report 网站:http://www.rubylong.cn Grid++Report 演示:http://www.rubylong.cn/WebReport
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值