在DataSet中有2个表:ZhiGong表(职工)和BuMen表(部门)
    ZhiGong表字段:Code,cName,BMcID  (义:编号,姓名,部门ID)
    BuMen表字段:BMcID,BMcName  (义:部门ID,部门名称)
    ZhiGong.BMcID与BuMen.BMcID字段在DataSet中左外部关联起来了。
希望设计一个RDLC报表,打印结果如下:
         职工资料表
职工编号|职工姓名|部门名称注:不允许采用“SELECT ZhiGong.Code, ZhiGong.cName, BuMen.BMcName FROM ZhiGong LEFT OUTER JOIN BuMen ON ZhiGong.BMcID = BuMen.BMcID”语句合并为1个表!
我用代码reportViewer1.LocalReport.DataSources.Add(rds);填充了数据,但预览结果并没有实现关联效果。
请问要如何正确设计这种RDLC报表?谢谢!

解决方案 »

  1.   

    会有这种奇怪的需求??
       不管怎么样  如果要按匹配的员工信息和部门信息输出的话  就要联表查询 
         不联表查询就要  取两个table的数据做遍历    性能就惨不忍睹了
      

  2.   

    因为报表中的数据要来源于Form窗口中现有的DataSet数据,Form窗口中的DataSet就是由2个表关联组成的。
    Form窗口用于新增、删除、编辑资料,窗口工具栏上有一个“预览”按钮,预览时直接传递DataSet给RDLC报表,无需重新检索数据。并且Form窗口上的数据可由用户任意查询过滤,预览时也只可打印查询过滤后的数据。
    所以需要这样设计RDLC报表。
      

  3.   

    觉得可以很容易解决啊。既然你的dataset中都已经有了过滤后的数据,也知道RDLC需要展示的字段。你往解决方案中再添加一个数据集文件,构建一个虚拟的dataset(名称与实际的dataset一致),里面含有你需要的三列(列名与实际dataset中的那几个列相同)。再拉动这三列将这些列绑定到rdlc中,既可。之后可以再删除这个数据集文件。它只起到一个动态配置的作用。
      

  4.   


    看来你还没看懂题目,在DataSet数据集中有2表,这2个表由ZhiGong.BMcID与BuMen.BMcID字段相关联,传递数据后,预览时发现“部门名称”并没有关联到正确的值。
    如果1个表那就简单了,谁都会做。
      

  5.   

    知道你是两个表,你可以设置dataset中两个表的主从关系,将数据筛选导到另一个表。不就变成一个表了。
    当然这种在大量数据时可能效率低些。
      

  6.   

    要将2个表转成1个表当前可以实现,现在也就是考虑到效率问题,不希望这样做。
    如何才可以实现这种高效率的方法,难道RDLC报表不允许2个表关联取值?在DataSet中是可以连线关联的呀。
      

  7.   

    这种报表是非常常见的,为什么就没有人知道呢?难道大家就只知道用1个表设计简单的RDLC报表吗?不能关联?
      

  8.   

    可参考
    http://blog.csdn.net/chuangxin/archive/2009/04/11/4064462.aspx
      

  9.   

    rdlc报表相当于一个控件了,你只要把指定接口的DataTable按照名称加到rdlc的DataSource里面,就可以了。所以,rdlc的数据源是后绑定,那么你可以在给rdlc设置数据源之前,将这两个数据表(DataTable)合并为一个表,也就是你想要的数据:职工编号|职工姓名|部门名称,然后把这个数据加到rdlc的数据源即可。假如:dtZhigong,dtBumen
    DataTable dt = new DataTable();
    dt.Columns.Add("职工编号",Type.GetType("System.String"));
    dt.Columns.Add("职工姓名",Type.GetType("System.String"));
    dt.Columns.Add("部门名称",Type.GetType("System.String"));DataRow newRow;
    foreach(DataRow row in dtZhigong.Rows)
    {
        newRow = dt.NewRow();
        newRow["职工编号"] = row["职工编号"];
        newRow["职工姓名"] = row["职工姓名"];
        //再根据dtZhigong,dtBumen来找到部门名称
        ...
        dt.Rows.Add(newRow);
    }ReportDataSource rds = new ReportDataSource("RDLC中数据源的名称",dt);
    reportViewer1.LocalReport.DataSources.Add(rds);
      

  10.   

    如果你不希望在服务端来取这些“关联数据”,那么在客户端你仍然免不了做这样的工作,因为你要保证你给rdlc所加的datatable的结构要和rdlc中所使用的datatable的结构一致。
    所以,在服务端你可以直接用sql语句来实现“关联数据”的获取,如果你放弃这个,那么就在客户端手动处理吧。
      

  11.   

    先添加一个数据集文件,里面就三个字段,职工编号|职工姓名|部门名称 
    CS代码里
    数据集文件的名称 rds = 已有的dataset
    reportViewer1.LocalReport.DataSources.Add(rds);
      

  12.   

    我知道用1个表是很好实现,但还有很多特殊原因是必须要用2个表更好。
    我设计RDLC报表时的DataSet里面也是2个表,有进行外部关联,然后分别将2个表要打印的字段拖到同1个“表控件”里的,但是对2个表填充数据后,“部门名称”字段没有正确关联取到对应的值。
      

  13.   

    reportViewer1.LocalReport.DataSources.Add(rt1),可以加rt1,rt2,rt3....
    reportViewer1.LocalReport.DataSources.Add(rt2),
    reportViewer1.LocalReport.DataSources.Add(rt3),