【ActiveReports18】RDLX主从表结构报表如何显示并多页打印?
例如,我当前有出库单如下:我当前代码如下:
public async Task<DataTable> LoadData(LocateDataSourceArgs args)
{
//取值,URL传参,多个参数需要使用&进行分割
var urlParamStr = (object[])args.ReportParameters.Value;
var dic = ReportHelper.StringToDictionary(urlParamStr.ToString());
string id = dic["id"].ToString();
DataTable dt = new DataTable();
var _context = _outboundOrderRepository.DbContext;
if (args.DataSet.Query.DataSourceName == "DataSource1")
{
if (args.DataSet.Name == "DataSet1")
{
dt.Columns.Add("出库开单单号");
dt.Columns.Add("开单日期");
dt.Columns.Add("制单人");
dt.Columns.Add("制单日期");
dt.Columns.Add("出库人");
dt.Columns.Add("出库部门");
dt.Columns.Add("备注");
dt.Columns.Add("审核人");
dt.Columns.Add("审核时间");
var orderInfo = await _context.Queryable<Xb_OutboundOrder>().Where(x => x.OutboundOrderId == Convert.ToInt64(id)).FirstOrDefaultAsync();
if (orderInfo == null) return dt;
var lxUserInfo = await _context.Queryable<Sys_UserInfo>().Where(x => x.User_Id == orderInfo.AuditId).FirstOrDefaultAsync();
var zdUserInfo = await _context.Queryable<Sys_UserInfo>().Where(x => x.User_Id == orderInfo.CreateID).FirstOrDefaultAsync();
string deptmentName = string.Empty;
if (orderInfo.DepartmentId.HasValue)
{
var deptmentInfo = await _context.Queryable<Sys_Department>().Where(x => x.DepartmentId.ToString() == orderInfo.DepartmentId.Value.ToString()).FirstOrDefaultAsync();
deptmentName = deptmentInfo?.DepartmentName;
}
var ckUserInfo = await _context.Queryable<Sys_UserInfo>().Where(x => x.User_Id == orderInfo.WarehouseKeeper).FirstOrDefaultAsync();
dt.Rows.Add(orderInfo.Number, orderInfo.InvoiceDate,
zdUserInfo?.UserTrueName, orderInfo.CreateDate, ckUserInfo?.UserTrueName, deptmentName, orderInfo.Remarks,
lxUserInfo?.UserTrueName, orderInfo.AuditDate);
}
else if (args.DataSet.Name == "DataSet2")
{
dt.Columns.Add("货品名称");
dt.Columns.Add("货品编号");
dt.Columns.Add("型号");
dt.Columns.Add("规格");
dt.Columns.Add("单位");
dt.Columns.Add("仓库");
dt.Columns.Add("库位");
dt.Columns.Add("批次");
dt.Columns.Add("数量");
dt.Columns.Add("单价");
dt.Columns.Add("总金额");
dt.Columns.Add("自定义1");
dt.Columns.Add("自定义2");
dt.Columns.Add("自定义3");
dt.Columns.Add("品牌");
dt.Columns.Add("生产日期");
dt.Columns.Add("过期日期");
dt.Columns.Add("仓库编号");
dt.Columns.Add("库位编号");
dt.Columns.Add("备注");
var orderItemList = await _context.Queryable<Xb_OutboundOrderItem>().Where(x => x.OutboundOrderId == Convert.ToInt64(id)).OrderByDescending(x => x.Id).ToListAsync();
if (!orderItemList.Any()) return dt;
foreach (var orderItem in orderItemList)
{
var productInfo = await _context.Queryable<Xb_Product>().Where(x => x.Id == orderItem.ProductId).FirstOrDefaultAsync();
var warehouseInfo = await _context.Queryable<Xb_Warehouse>().Where(x => x.Id == orderItem.WarehouseId).FirstOrDefaultAsync();
var warehouseLocationInfo = await _context.Queryable<Xb_WarehouseLocation>().Where(x => x.Id == orderItem.WarehouseLocationId).FirstOrDefaultAsync();
dt.Rows.Add(productInfo?.Name, productInfo?.Number, productInfo?.Model,
productInfo?.Specifications, productInfo?.Unit, warehouseInfo?.Name, warehouseLocationInfo?.Name,
orderItem.Batch, orderItem.Quantity, orderItem.Price, orderItem.Quantity * orderItem.Price,
productInfo?.Custom1, productInfo?.Custom2, productInfo?.Custom3, productInfo?.Brand,
orderItem.ProductionDate, orderItem.ExpirationDate, warehouseInfo?.Number, warehouseLocationInfo?.Number, orderItem?.Remarks);
}
}
}
return dt;
}
现在我需要打印多页,要如何实现? 本帖最后由 Felix.Li 于 2024-11-4 10:15 编辑
您好,主从报表的多页打印,不需要在数据层面做处理。只需要报表设计改成每个主表的分组换页即可。
具体如下:
1.添加主表表格。根据主表分组条件进行分组:
并添加分组换,介于每页换页:
这样报表就会根据你的数据主表的分组条件,每个分组显示一页,这一页显示完后就会自动换页,然后咱们在这个表格的分组行里面设计嵌套的子表格即可。
这是简单的分组换页Demo:
Felix.Li 发表于 2024-11-4 10:07
您好,主从报表的多页打印,不需要在数据层面做处理。只需要报表设计改成每个主表的分组换页即可。
具体如 ...
我现在用列表可以实现分页的功能,但是为什么只会触发数据集dataset1,不会触发dataset2,我换个模版又可以
如图 Quincy 发表于 2024-11-4 11:12
如图
您好,看您使用的是运行时数据源,您检查一下对应的报表设计是否和您代码中的一致,看您回复切换模版后可以正常显示,您可以对比一下2个报表模板。我看您代码中是DataSource下有个DataSet1和DateSet2,您看看您报表模板中是否也是对应的,也可以打断点来一一查看一下。
页:
[1]