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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:38:10