WinForms ReportViewer传入参数后无数据返回问题求助
ReportViewer空白报表问题排查与修复
问题背景
已为此问题困扰2小时,ReportViewer可正常执行但无法返回正确数据,执行后仅显示空白报表。
核心错误分析
你的代码存在4个关键问题,导致报表无数据:
- 数据源绑定错误:
ReportDataSource的第二个参数必须是实际数据集(如DataTable),而非数据集文件路径"PTRDataSet1.xsc" - 报表路径重复配置:
ReportPath与ReportEmbeddedResource不可同时使用,二者选其一即可 - 参数传递错误:给存储过程参数额外添加单引号,导致查询条件与数据库中字段值不匹配
- 缺失数据获取逻辑:未执行存储过程从数据库拉取有效数据
修正后的代码示例
按钮点击事件(含完整数据获取逻辑)
private void button2_Click(object sender, EventArgs e) { // 1. 从数据库执行存储过程获取数据 DataTable dt = new DataTable(); using (SqlConnection conn = new SqlConnection("你的数据库连接字符串")) { SqlCommand cmd = new SqlCommand("Proc1", conn); cmd.CommandType = CommandType.StoredProcedure; // 直接传递文本值,无需额外添加单引号 cmd.Parameters.Add(new SqlParameter("@CustCode", textBox1.Text.Trim())); conn.Open(); dt.Load(cmd.ExecuteReader()); conn.Close(); } // 2. 配置报表数据源(DataSet1需与RDLC内的数据集名称完全一致) reportViewer1.LocalReport.DataSources.Clear(); reportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", dt)); // 3. 配置报表路径(二选一,示例使用嵌入资源,需替换为你的项目命名空间) // 若为独立文件则使用:reportViewer1.LocalReport.ReportPath = @"Report1.rdlc"; reportViewer1.LocalReport.ReportEmbeddedResource = "你的项目命名空间.Report1.rdlc"; // 4. 设置报表参数(需与RDLC内的参数名称一致) ReportParameter p = new ReportParameter("CustCode", textBox1.Text.Trim()); reportViewer1.LocalReport.SetParameters(p); // 刷新报表 reportViewer1.RefreshReport(); }
存储过程代码(无需修改,确保字段类型匹配即可)
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[Proc1] @CustCode varchar(15) AS BEGIN SET NOCOUNT ON; SELECT * FROM xxx..Shipment WHERE CustomerCode = @CustCode; END
额外验证项
- 确认RDLC报表内的数据集名称与代码中的
DataSet1完全一致 - 验证
textBox1输入的客户编码在数据库Shipment表中存在 - 检查数据库连接字符串是否正确,确保程序可正常连接数据库
内容的提问来源于stack exchange,提问作者Wilest
相关产品推荐
相关产品推荐

