表A中的字段日志编号由人员编号+日期组成,表B是人员表,我现在要查询表A中的数据并显示表B中的人员名,SQL语句已经写好了,我的报表是传个SQL语句放到DataSet里面显示
DataSet ds = daoAccess.getReportDataSet(reportSql);
            CrystalReport1 oRpt = new CrystalReport1(); //已建立的报表rptClient
            //使用“报表引擎”对象模型将填充的数据集,传递给报表
            oRpt.SetDataSource(ds.Tables[0]);
            //将带有数据的报表对象绑定到 Windows 窗体查看器,rptVew(CrystalReportViewer控件)
            this.crystalReportViewer1.ReportSource = oRpt;
我在报表中加入了A和B表,但是怎么关联这两个表,现在只能显示人员名,表A中的数据都没显示,请高手指点!!

解决方案 »

  1.   

    在你画报表时就要拉这两个表过去设计,然后建关系。编号。
    然后在你后台SQL直接就交叉表传为数据集。
      

  2.   

    关键是A表中的日志编号不等于B表的人员编号,这两个表之间没有主外键关系,只不过日志编号是由人员编号和日期组成,在SQL语句中的WHERE条件是截取日志编号的前17位是人员编号
      

  3.   

    将两个表创建一个试图,在项目中创建数据集,将数据集的表与试图绑定.在数据专家中选择ado.net dataset数据中的表,将表中字段拉到数据报表详细信息中,设计部分就ok了.
    代码部分:string sql = "select * from table1 pid=001";
                string DBConfig_sql = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=zsdy.mdb;";
                DataSet ds = new DataSet();
                OleDbConnection sqlCon = new OleDbConnection(DBConfig_sql);
                OleDbCommand sqlCmd = new OleDbCommand(sql, sqlCon);
                OleDbDataAdapter sqlAd = new OleDbDataAdapter();
                sqlAd.SelectCommand = sqlCmd;
                sqlAd.Fill(ds, "sql");
                ReportDocument ReportDoc;
                ReportDoc = new ReportDocument();
                ReportDoc.Load(Application.StartupPath+"\\fuben.rpt");//C/S程序将水晶报表放在bin文件夹Debug文件夹中
                ReportDoc.SetDataSource(ds.Tables[0]);
                crystalReportViewer1.ReportSource = ReportDoc;
    上面的sql语句就是控制水晶报表中显示的关键,数据报表中的数据是更具sql生产的数据来改变的.