You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RDLC报表无数据问题:实现RDLC报表转PDF(附代码)

解决RDLC报表无数据显示的问题

从你贴的代码片段来看,报表空数据的问题基本出在数据获取、填充和数据源绑定这几个环节上,我帮你梳理几个关键的排查和修复步骤:

1. 先把数据查询和DataTable填充做对

你当前的查询只取了FirstName单个字段:

var entities_data = from c in Entities.Orders select c.FirstName;

但报表依赖的是DataSet1.Tables["Orders"]这个DataTable,它需要包含报表设计时用到的所有字段,而不是孤零零的一个名字。你得完整查询订单数据,再把数据塞进DataTable里。

给你个修改示例:

// 先把数据库里的订单数据完整查出来
var ordersList = Entities.Orders.ToList();
// 循环把每条数据填充到DataTable的行里
foreach (var order in ordersList)
{
    DataRow newRow = ordersTable.NewRow();
    // 这里要对应你DataSet里Orders表的字段,比如OrderId、FirstName、OrderDate这些
    newRow["OrderId"] = order.OrderId;
    newRow["FirstName"] = order.FirstName;
    newRow["OrderDate"] = order.OrderDate;
    // 其他报表用到的字段也得一一赋值
    ordersTable.Rows.Add(newRow);
}

如果你的实体类和DataSet的字段完全匹配,也可以用更简便的方式:

var ordersList = Entities.Orders.ToList();
ordersTable.Load(new ObjectReader(ordersList));
// 注:需要引用System.Data.Entity.Design库,或者自己写个实体转DataRow的工具类

2. 确认数据源名称完全匹配

RDLC报表里定义的数据源名称,必须和代码里ReportDataSource的名称完全一致(大小写都不能错)。比如你报表里的数据源叫DataSet1_Orders,那代码里就得这么写:

// 这里的第一个参数一定要和RDLC里的数据源名称一模一样
localreport.DataSources.Add(new ReportDataSource("DataSet1_Orders", ordersTable));

你贴的代码写到new ReportDataSourc...就断了,这部分一定要补全,名称错了报表根本认不到数据。

3. 先确认数据库里真的有数据

填充完DataTable后,加一行调试代码看看:

// 看看DataTable里到底有没有行
int rowCount = ordersTable.Rows.Count;

如果rowCount是0,那说明从数据库里根本没查到数据,得先去检查Entities.Orders对应的数据库表有没有记录,而不是纠结报表的问题。

4. 检查报表设计里的绑定是否正确

打开RDLC报表设计器,确认这两点:

  • 报表里的表格(Tablix)是绑定到正确的数据集上的
  • 表格里的每一列,都是绑定到数据集的对应字段,不是空值或者写错了字段名

5. 给你一个完整的参考代码模板

你可以对照着补全自己的代码:

public ActionResult Reports(string ReportType)
{
    // 用using自动释放数据库上下文,避免资源泄漏
    using (MyApplication_dbEntities Entities = new MyApplication_dbEntities())
    {
        DataSet1 dataSet = new DataSet1();
        DataTable ordersTable = dataSet.Tables["Orders"];

        // 获取完整订单数据
        var ordersData = Entities.Orders.ToList();
        if (ordersData.Any())
        {
            // 填充DataTable
            foreach (var order in ordersData)
            {
                DataRow row = ordersTable.NewRow();
                row["OrderId"] = order.OrderId;
                row["FirstName"] = order.FirstName;
                row["OrderDate"] = order.OrderDate;
                // 补充报表需要的其他字段
                ordersTable.Rows.Add(row);
            }
        }

        LocalReport localReport = new LocalReport();
        localReport.ReportPath = Server.MapPath("~/Reports/Report1.rdlc");
        // 数据源名称必须和RDLC里的一致
        localReport.DataSources.Add(new ReportDataSource("DataSet1_Orders", ordersTable));

        // 生成PDF的完整逻辑
        string mimeType;
        string encoding;
        string fileNameExtension;
        Warning[] warnings;
        string[] streams;

        string deviceInfo = @"<DeviceInfo>
                                <OutputFormat>PDF</OutputFormat>
                                <PageWidth>8.5in</PageWidth>
                                <PageHeight>11in</PageHeight>
                                <MarginTop>0.5in</MarginTop>
                                <MarginLeft>0.5in</MarginLeft>
                                <MarginRight>0.5in</MarginRight>
                                <MarginBottom>0.5in</MarginBottom>
                              </DeviceInfo>";

        byte[] renderedBytes = localReport.Render(
            ReportType,
            deviceInfo,
            out mimeType,
            out encoding,
            out fileNameExtension,
            out streams,
            out warnings);

        return File(renderedBytes, mimeType);
    }
}

内容的提问来源于stack exchange,提问作者user5303319

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:31:25