Crystal Report无法显示DataTable从数据库获取的数据求助
解决Crystal Report无法显示数据库数据的问题
从你的代码和描述来看,核心问题是你的Crystal Report没有绑定到包含数据库数据的DataTable——你当前只设置了报表里的几个文本对象,但没有把查询到的数据源关联到报表上,所以预览时自然看不到数据库里的数据。下面是具体的解决步骤和修改建议:
1. 先确认查询用的DataTable确实有数据
在调试时先检查你的DataTable是否成功从数据库获取到了数据:
- 可以在查询数据的代码后添加调试逻辑,比如:
Debug.WriteLine($"DataTable行数: {yourDataTable.Rows.Count}"); - 或者直接在Visual Studio的调试窗口查看DataTable的内容,确保它不是空的。
2. 把DataTable绑定到Crystal Report
在你的按钮代码里,创建CrystalReport1实例后,必须添加数据源绑定的代码。修改后的完整代码示例如下:
private void btnpurchase_Click(object sender, EventArgs e) { double cash; double change; double totalprice; double discount; double overalltotal; totalprice = double.Parse(txttotal.Text); discount = double.Parse(txtsenior.Text); cash = double.Parse(txtcash.Text); overalltotal = totalprice - discount; change = cash - overalltotal; txtchange.Text = change.ToString(); txttotal.Text = overalltotal.ToString(); Print f2 = new Print(); CrystalReport1 cr = new CrystalReport1(); // ------------------- 关键新增代码 ------------------- // 替换成你实际获取数据库数据的逻辑,得到填充好的DataTable DataTable purchaseDataTable = LoadPurchaseDataFromDB(); // 将DataTable设置为报表的数据源 cr.SetDataSource(purchaseDataTable); // --------------------------------------------------- TextObject text = (TextObject)cr.ReportDefinition.Sections["Section4"].ReportObjects["Text4"]; TextObject text2 = (TextObject)cr.ReportDefinition.Sections["Section4"].ReportObjects["Text5"]; TextObject text3 = (TextObject)cr.ReportDefinition.Sections["Section4"].ReportObjects["Text6"]; text.Text = txtcash.Text; text2.Text = txttotal.Text; text3.Text = txtchange.Text; f2.crystalReportViewer1.ReportSource = cr; f2.Show(); } // 示例:从数据库加载数据的方法,替换成你自己的查询逻辑 private DataTable LoadPurchaseDataFromDB() { DataTable dt = new DataTable(); // 替换成你的数据库连接字符串 string connString = "Server=你的服务器;Database=你的数据库;User Id=账号;Password=密码;"; using (SqlConnection conn = new SqlConnection(connString)) { // 替换成你的查询语句,确保能获取到需要显示在报表里的数据 string query = "SELECT * FROM 你的采购数据表 WHERE 条件"; SqlDataAdapter adapter = new SqlDataAdapter(query, conn); adapter.Fill(dt); } return dt; }
3. 检查Crystal Report的设计配置
- 打开你的
CrystalReport1设计界面,确认报表是基于你用来查询的DataTable/数据集创建的,列名、数据类型必须完全匹配。 - 如果之前报表绑定的是空数据源,需要重新配置:右键报表 → 数据库 → 数据库专家,添加正确的DataTable/数据集。
4. 额外排查点
- 确保DataGridView的数据已经成功提交到数据库:直接查看数据库表的内容,确认新数据确实写入了。
- 如果你的查询需要参数(比如按时间或单号查询),要确保在填充DataTable时已经传递了正确的参数,否则查询结果为空。
- 如果用的是强类型数据集(Typed DataSet),要确保填充的是对应的数据表,而不是普通的DataTable。
内容的提问来源于stack exchange,提问作者Hellscythen24
相关产品推荐
相关产品推荐

