找回密码
 立即注册

QQ登录

只需一步,快速开始

Quincy

注册会员

5

主题

20

帖子

65

积分

注册会员

积分
65
最新发帖
Quincy
注册会员   /  发表于:2024-11-3 15:02  /   查看:62  /  回复:4
5金币
例如,我当前有出库单如下:



我当前代码如下:
  1. public async Task<DataTable> LoadData(LocateDataSourceArgs args)
  2. {
  3.         //取值,URL传参,多个参数需要使用&进行分割
  4.         var urlParamStr = (object[])args.ReportParameters[0].Value;

  5.         var dic = ReportHelper.StringToDictionary(urlParamStr[0].ToString());

  6.         string id = dic["id"].ToString();

  7.         DataTable dt = new DataTable();

  8.         var _context = _outboundOrderRepository.DbContext;

  9.         if (args.DataSet.Query.DataSourceName == "DataSource1")
  10.         {
  11.                 if (args.DataSet.Name == "DataSet1")
  12.                 {
  13.                         dt.Columns.Add("出库开单单号");
  14.                         dt.Columns.Add("开单日期");
  15.                         dt.Columns.Add("制单人");
  16.                         dt.Columns.Add("制单日期");
  17.                         dt.Columns.Add("出库人");
  18.                         dt.Columns.Add("出库部门");
  19.                         dt.Columns.Add("备注");
  20.                         dt.Columns.Add("审核人");
  21.                         dt.Columns.Add("审核时间");
  22.                         var orderInfo = await _context.Queryable<Xb_OutboundOrder>().Where(x => x.OutboundOrderId == Convert.ToInt64(id)).FirstOrDefaultAsync();

  23.                         if (orderInfo == null) return dt;

  24.                         var lxUserInfo = await _context.Queryable<Sys_UserInfo>().Where(x => x.User_Id == orderInfo.AuditId).FirstOrDefaultAsync();

  25.                         var zdUserInfo = await _context.Queryable<Sys_UserInfo>().Where(x => x.User_Id == orderInfo.CreateID).FirstOrDefaultAsync();

  26.                         string deptmentName = string.Empty;
  27.                         if (orderInfo.DepartmentId.HasValue)
  28.                         {
  29.                                 var deptmentInfo = await _context.Queryable<Sys_Department>().Where(x => x.DepartmentId.ToString() == orderInfo.DepartmentId.Value.ToString()).FirstOrDefaultAsync();
  30.                                 deptmentName = deptmentInfo?.DepartmentName;
  31.                         }

  32.                         var ckUserInfo = await _context.Queryable<Sys_UserInfo>().Where(x => x.User_Id == orderInfo.WarehouseKeeper).FirstOrDefaultAsync();

  33.                         dt.Rows.Add(orderInfo.Number, orderInfo.InvoiceDate,
  34.                                 zdUserInfo?.UserTrueName, orderInfo.CreateDate, ckUserInfo?.UserTrueName, deptmentName, orderInfo.Remarks,
  35.                                 lxUserInfo?.UserTrueName, orderInfo.AuditDate);

  36.                 }
  37.                 else if (args.DataSet.Name == "DataSet2")
  38.                 {
  39.                         dt.Columns.Add("货品名称");
  40.                         dt.Columns.Add("货品编号");
  41.                         dt.Columns.Add("型号");
  42.                         dt.Columns.Add("规格");
  43.                         dt.Columns.Add("单位");
  44.                         dt.Columns.Add("仓库");
  45.                         dt.Columns.Add("库位");
  46.                         dt.Columns.Add("批次");
  47.                         dt.Columns.Add("数量");
  48.                         dt.Columns.Add("单价");
  49.                         dt.Columns.Add("总金额");
  50.                         dt.Columns.Add("自定义1");
  51.                         dt.Columns.Add("自定义2");
  52.                         dt.Columns.Add("自定义3");
  53.                         dt.Columns.Add("品牌");
  54.                         dt.Columns.Add("生产日期");
  55.                         dt.Columns.Add("过期日期");
  56.             dt.Columns.Add("仓库编号");
  57.             dt.Columns.Add("库位编号");
  58.             dt.Columns.Add("备注");
  59.             var orderItemList = await _context.Queryable<Xb_OutboundOrderItem>().Where(x => x.OutboundOrderId == Convert.ToInt64(id)).OrderByDescending(x => x.Id).ToListAsync();

  60.                         if (!orderItemList.Any()) return dt;

  61.                         foreach (var orderItem in orderItemList)
  62.                         {
  63.                                 var productInfo = await _context.Queryable<Xb_Product>().Where(x => x.Id == orderItem.ProductId).FirstOrDefaultAsync();

  64.                                 var warehouseInfo = await _context.Queryable<Xb_Warehouse>().Where(x => x.Id == orderItem.WarehouseId).FirstOrDefaultAsync();

  65.                                 var warehouseLocationInfo = await _context.Queryable<Xb_WarehouseLocation>().Where(x => x.Id == orderItem.WarehouseLocationId).FirstOrDefaultAsync();

  66.                                 dt.Rows.Add(productInfo?.Name, productInfo?.Number, productInfo?.Model,
  67.                                         productInfo?.Specifications, productInfo?.Unit, warehouseInfo?.Name, warehouseLocationInfo?.Name,
  68.                                         orderItem.Batch, orderItem.Quantity, orderItem.Price, orderItem.Quantity * orderItem.Price,
  69.                                         productInfo?.Custom1, productInfo?.Custom2, productInfo?.Custom3, productInfo?.Brand,
  70.                                         orderItem.ProductionDate, orderItem.ExpirationDate, warehouseInfo?.Number, warehouseLocationInfo?.Number, orderItem?.Remarks);
  71.                         }


  72.                 }

  73.         }

  74.         return dt;

  75. }
复制代码


现在我需要打印多页,要如何实现?

附件: 您需要 登录 才可以下载或查看,没有帐号?立即注册

4 个回复

正序浏览
Bella.YuanWyn认证
超级版主   /  发表于:昨天 14:10
地板

您好,看您使用的是运行时数据源,您检查一下对应的报表设计是否和您代码中的一致,看您回复切换模版后可以正常显示,您可以对比一下2个报表模板。我看您代码中是DataSource下有个DataSet1和DateSet2,您看看您报表模板中是否也是对应的,也可以打断点来一一查看一下。
回复 使用道具 举报
Quincy
注册会员   /  发表于:昨天 11:12
板凳
如图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
Quincy
注册会员   /  发表于:昨天 11:10
沙发
Felix.Li 发表于 2024-11-4 10:07
您好,主从报表的多页打印,不需要在数据层面做处理。只需要报表设计改成每个主表的分组换页即可。
具体如 ...

我现在用列表可以实现分页的功能,但是为什么只会触发数据集dataset1,不会触发dataset2,我换个模版又可以
回复 使用道具 举报
Felix.LiWyn认证
超级版主   /  发表于:昨天 10:07
楼主
本帖最后由 Felix.Li 于 2024-11-4 10:15 编辑

您好,主从报表的多页打印,不需要在数据层面做处理。只需要报表设计改成每个主表的分组换页即可。
具体如下:
1.添加主表表格。根据主表分组条件进行分组:


并添加分组换,介于每页换页:

这样报表就会根据你的数据主表的分组条件,每个分组显示一页,这一页显示完后就会自动换页,然后咱们在这个表格的分组行里面设计嵌套的子表格即可。
这是简单的分组换页Demo:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部