分别绑定主、子表数据源: SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MyOffice"].ConnectionString); string sql = "select * from Test"; conn.Open(); SqlCommand cmd = new SqlCommand(sql, conn); SqlDataAdapter sda = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); DataSet ds1 = new DataSet(); DataTable table = new DataTable(); sda.Fill(ds, "Test"); string sql1 = "select * from Test_Book"; SqlCommand cmd1 = new SqlCommand(sql1, conn); SqlDataAdapter sda1 = new SqlDataAdapter(cmd); sda1.Fill(ds1, "Test_Book"); conn.Close(); //加载报表 CrystalReportSource1.ReportDocument.Load(Server.MapPath("CrystalReport2.rpt")); CrystalReportSource1.ReportDocument.SetDataSource(ds); CrystalReportSource1.ReportDocument.Subreports["R1"].SetDataSource(ds1); CrystalReportSource1.DataBind(); CrystalReportSource1.ReportDocument.PrintToPrinter(0, false, 0, 0); CrystalReportViewer1.ReportSource = CrystalReportSource1; CrystalReportViewer1.DataBind();