private void ReportShow()
        {
            //声明报表
            CrystalReport1 myRpt = new CrystalReport1();           
            
            //初始化报表内容
DataTable dt1 = new DataTable();
dt1.Columns.Add("aaa");
DataTable dt2 = new DataTable();
dt2.Columns.Add("bbb");
  DataSet ds1 = MSPJGetDataSet1();
            for (int i = 0; i < ds1.Tables[0].Rows.Count;i++)
            {
                dt1.Rows.Add();
               dt1.Rows[i]["aaa"] = ds1.Tables[0].Rows[i]["aaa"];
            }
             DataSet ds2 = MSPJGetDataSet2();
             for (int i = 0; i < ds2.Tables[0].Rows.Count; i++)
             {
                 dt2.Rows.Add();
                 dt2.Rows[i]["bbb"] = ds2.Tables[0].Rows[i]["bbb"];             }
myRpt.SetDataSource(dt);
this.crystalReportViewer1.ReportSource = myRpt;有这些了 怎么让dt1和dt2给了dt

解决方案 »

  1.   

    你为什么不考虑往一个DataTable 里面写呢?我一起做项目的时候试过但是没有成功,最好我就写到一个DataTable里面了
      

  2.   

    请参考:
    http://msdn.microsoft.com/zh-cn/library/system.data.datatable.merge.aspx.NET Framework 类库
    DataTable.Merge 方法 将指定的 DataTable 与当前的 DataTable 合并。
     Merge 方法用于合并架构大致相似的两个 DataTable 对象。合并在客户端应用程序上通常用于将数据源中最近的更改合并到现有的 DataTable 中。这使客户端应用程序能够拥有用数据源中的最新数据刷新的 DataTable。 合并操作仅对原始表和要合并的表进行操作。子表不会受到影响或被包括在内。如果某个表具有一个或多个作为关系的一部分定义的子表,则需要分别合并每个子表。 
      

  3.   

    循环吧,你这个要求,只能循环来做
    DataTable dt=dt1.Copy();
    for (int i = 0; i < dt2.Rows.Count;i++) 

        DataRow row=dt.NewRow();
        row["aaa"]=dt2.Rows[i]["bbb"];
        dt.Rows.Add(row);
    }