CrystalReport始终显示相同的数据

本文关键字:数据 显示 CrystalReport | 更新日期: 2023-09-27 18:30:14

我需要用程序显示数据,但我的代码显示的数据总是一样的。即使我更改WHERE em.emp_id=5或6 也是如此

private void Form1_Load(object sender, EventArgs e)
{
    try
    {
        SqlConnection c = frmMain.connect();
        rptEmpProf cryRpt = new rptEmpProf();
        TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
        TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
        ConnectionInfo crConnectionInfo = new ConnectionInfo();
        Tables CrTables ;
        crConnectionInfo.ServerName = frmMain.dbSrvrName;
        crConnectionInfo.DatabaseName = frmMain.dbName;
        crConnectionInfo.UserID = frmMain.dbUsrName;
        crConnectionInfo.Password = frmMain.dbPass;
        CrTables = cryRpt.Database.Tables ;
        foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
        {
            crtableLogoninfo = CrTable.LogOnInfo;
            crtableLogoninfo.ConnectionInfo = crConnectionInfo;
            CrTable.ApplyLogOnInfo(crtableLogoninfo);
        }
        string q = "SELECT em.emp_id 'Employee ID', " +
            "em.emp_fname 'First Name', " +
            "em.emp_lname 'Last Name', " +
            "em.emp_phone 'Phone', " +
            "em.emp_email 'Email', " +
            "em.emp_addr 'Address', " +
            "em.emp_join_dt 'Join Date', " +
            "em.emp_salary 'Salary'," +
            "em.emp_card_no 'Card No.', " +
            "ds.dsg_name 'Designation', " +
            "dp.dept_name 'Department', " +
            "sf.sft_name 'Shift', " +
            "sc.sec_name 'Section' " +
        "FROM employee em INNER JOIN designations ds ON ds.dsg_id=em.emp_dsg_id " +
            "INNER JOIN sections sc ON sc.sec_id = ds.dsg_sec_id " +
            "INNER JOIN departments dp ON dp.dept_id = sc.sec_dept_id " +
            "INNER JOIN shifts sf ON sf.sft_id = em.emp_sft_id " +
        "WHERE em.emp_id = 6;";
        SqlCommand cmd = new SqlCommand(q, c);
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;
        DataSet ds = new DataSet();
        da.Fill(ds);
        cryRpt.SetDataSource(ds);
        crystalReportViewer1.ReportSource = cryRpt;
        crystalReportViewer1.Refresh();
        frmMain.disconnect(c);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
        this.Close();
    }
}

CrystalReport始终显示相同的数据

您被硬编码

 WHERE em.emp_id = 6

请动态传递。调试:首先检查您的可数据数据。

Raihan,

当您使用将数据集馈送到Crystal Report时,最重要的是:

  1. 您最初构建报告的数据源类型
  2. 您现在提供的数据集是精确的匹配(相同的列和类型)

如果操作正确,则不需要像在此处那样设置连接信息并将登录信息应用于报告。(你只需要这些东西来构建你的数据集。Crystal Reports并不在乎,因为它只需要这些数据,当你给它已经查询过的数据时,它为什么会在乎服务器/数据库/密码?)

下面是一个从XML数据源构建报告,然后传递数据的示例:http://www.crystalreportsbook.com/Forum/forum_posts.asp?TID=9

你会发现它比你的副本简单得多。事实上,我认为您不断看到相同数据的原因是它正在连接到服务器等,您的表登录信息正在指定并使用用于生成报告的默认查询。您的数据集将被忽略。

Raihan,从删除此代码开始。当你这样做的时候会发生什么?

TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
ConnectionInfo crConnectionInfo = new ConnectionInfo();
Tables CrTables;
crConnectionInfo.ServerName = frmMain.dbSrvrName;
crConnectionInfo.DatabaseName = frmMain.dbName;
crConnectionInfo.UserID = frmMain.dbUsrName;
crConnectionInfo.Password = frmMain.dbPass;
CrTables = cryRpt.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = crConnectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
}

Raihan,在完成了我上面写的内容之后,如果它现在提示您,这意味着它不喜欢您的DataSet。不要试图通过向报表传递服务器名称等方法来解决问题。请尝试修复数据集。

您正在为数据集的select语句中创建列的别名。水晶报告就是这样的吗?如果Crystal Reports中的字段名为"emp_id"、"emp_fname"answers"emp_lname"等,则绝对不应将它们别名为"Employee id"、"First Name"answers"Last Name"等。

您的列集合有:

  1. 列太少,太多。您需要报表所基于的确切集合。(您可以在Crystal报表设计器中看到这一点。)

  2. 列名称不正确。

  3. 现在具有不同类型的列。例如,您更改了数据库中的列类型。如果报表尚未更新为使用此新列类型,则如果数据集未传入相同类型的列,则数据集将失败。

终于解决了。。。

我在填充数据集时添加了该表。

da.Fill(ds.Tables[0]);

代替

da.Fill(ds);