2012-04-07 76 views
0

我需要以编程方式显示数据,但我的代码显示的数据总是相同的。同样,即使我改变WHERE em.emp_id = 5或6CrystalReport始终显示相同的数据

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(); 
    } 
} 
+0

是否真的数据时,不同的雇员5或6?你可以仔细检查一下吗? – sarwar026 2012-04-07 10:08:43

回答

0

您是硬编码

WHERE em.emp_id = 6 

请通过动态。 调试:检查您的可映射数据首先。

+0

“即使我改变了WHERE em.emp_id = 5或6”我认为这些OP都试过了。 – ChrisF 2012-04-07 09:51:39

+0

我认为你的查询返回相同的数据请调试并检查它。也检查数据库专家的自动绑定到reportviewer – 2012-04-07 09:52:33

+0

这是没有问题的。我看到,如果我的代码几乎没有5到6,它总是显示5个数据 – Raihan 2012-04-07 09:53:25

0

Raihan,

当您使用喂养的DataSet水晶报表中最重要的事情是:

  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之后。不要尝试通过将报告传递给服务器名称等来解决问题。尝试修复DataSet。

您正在数据集的select语句中为您的列创建别名。这是水晶报告是如何?如果Crystal Reports中的字段被命名为'emp_id','emp_fname'和'emp_lname'等,那么您绝对不应将它们别名为'员工ID','名字'和'姓氏'等。

您的色谱柱收集有:

  1. 太少,太多列。你需要建立在报告的基础上。 (您可以在Crystal Report设计器中看到此内容。)

  2. 命名错误的列。

  3. 现在不同类型的列。例如,您更改了数据库中的列类型。如果报告未更新为使用此新列类型,那么如果数据集未通过相同类型的列,则数据集将失败。

+0

非常感谢您的回复。但是我很抱歉,我无法理解他们。我的英语很差...我比英语更懂CODE ...;) – Raihan 2012-04-07 10:01:57

+0

好吧,我明白你的意思,但在这种情况下,我究竟需要做什么?我已经尝试了一切... – Raihan 2012-04-07 10:18:39

+0

我已经更新了我的答案,请看。 – 2012-04-07 10:26:10

0

最后也就迎刃而解了......

我添加表却使数据集。

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

而不是

da.Fill(ds);