用两个和一个有什么区别?反正DataTable又不能重名。用一个不是很好吗?表名称不同而已。

解决方案 »

  1.   

    先填充数据集,报表再引用数据集的字段,和其他报表没有什么区别.请看下面的示例代码:
    SqlConnection cn=new SqlConnection(strConn);
    string cmd=@"你的SELECT语句";
    SqlCommand mycmd=new SqlCommand(cmd,cn);
    SqlDataAdapter da=new SqlDataAdapter(cmd,cn);
    DataSet ds=new DataSet();
    cn.Open();
    da.Fill(ds,"TableName"); retname myreport=new repname();
    myreport.SetDataSource(ds);
    this.CrystalReportViewer1.ReportSource=myreport;
    PrintRpt1.Rpt=myreport;
      

  2.   

    我做过试验的,如果填充一个DataSet是很正常的,但是如果填两个就不正常了
    myreport.SetDataSource(PersonData);
    myreport.SetDataSource(StationData);
      

  3.   

    看看这个:How do I loading two DataSet tables into a single DataGrid?  
    http://www.dotnet247.com/247reference/msgs/16/82642.aspx
      

  4.   

    liuhmy() 说的是对的,你应该将报表中所用到的表放在一个DataSet中,然后将dataset绑定到报表上
      

  5.   

    放在一个DataSet里面也可以,但是如何在报表中关联它们呢
      

  6.   

    谢谢lixigang(就怕认真)!
    //将两个表(数据集)的数据放到一个表(数据集)中
    public DataTable GetHortationByPIDUseTable(string pid)
    {
    DataTable hrt=new DataTable();
    hrt=ds.tb_Hortation.Copy();
    int i=hrt.Rows.Count-1;
    while(i>=0)
    {
    if(hrt.Rows[i]["c_personCodeH"].ToString().Trim()!=pid)
    {
    hrt.Rows[i].Delete();
    }
    i--;
    }
    hrt.AcceptChanges();
    //增加关联基本(信息姓名,身份证号)
    DataTable pt=GetPersonByPIDUseTable(pid);
    if(pt.Rows.Count>0)
    {
    hrt.Columns.Add("c_Chinesename", typeof(String));
    hrt.Columns.Add("c_PersonID", typeof(String));
    for(int j=0;j<hrt.Rows.Count;j++)
    {
    hrt.Rows[j]["c_Chinesename"]=pt.Rows[0]["c_Chinesename"];
    hrt.Rows[j]["c_PersonID"]=pt.Rows[0]["c_PersonID"];
    }
    }
    hrt.AcceptChanges();
    return hrt;
    }
    //报表窗体关联
    ClientComponent comp=ClientComponent.GetInstance();
    crp.SetDataSource(comp.GetHortationByPIDUseTable("12000000000000"));
    crystalReportViewer1.ReportSource=crp;