crystal 报告复制到数据表时出错
crystal report got error when copy to datatable
我在使用 crystal 报告
进行报告时遇到了问题
这是我的代码
protected void Page_Load(object sender, EventArgs e)
{
string Judul, Peminjam, Pinjam, Kembali;
DataTable dtReturn = new DataTable();
SqlConnection con = data.getKoneksi();
con.Open();
SqlCommand Perintah = new SqlCommand();
Perintah.Connection = con;
Perintah.CommandText = "SELECT DISTINCT Peminjaman.Katalog, Peminjaman.Pinjam, Peminjaman.Kembali, Pengguna.Nama, Buku.Judul, Buku.Jumlah, Temp.Kembali AS HrsKbl FROM Peminjaman INNER JOIN Buku INNER JOIN Temp ON Buku.ID = Temp.ID ON Peminjaman.Katalog = Buku.ID AND Peminjaman.Katalog = Temp.ID INNER JOIN Pengguna ON Peminjaman.Peminjam = Pengguna.NIS WHERE Peminjaman.Status = 'dipinjam' ORDER BY Kembali ASC";
SqlDataAdapter Adapter = new SqlDataAdapter();
Adapter.SelectCommand = Perintah;
Adapter.Fill(dtReturn);
LapBulanan.LaporanBulananDataTable dt = new LapBulanan.LaporanBulananDataTable();
foreach (DataRow dr in dtReturn.Rows)
{
Judul = dr["Judul"].ToString();
Peminjam = dr["Nama"].ToString();
Pinjam = dr["Pinjam"].ToString();
Kembali = dr["Kembali"].ToString();
}
DataTable dtTemp = dt;
ReportDocument rpt = new Laporan();
rpt.Load(Server.MapPath("~/Laporan.rpt"));
rpt.SetDataSource(dtTemp);
rpt.SetDataSource(dt.CopyToDataTable());
CrystalReportViewer1.ReportSource = rpt;
CrystalReportViewer1.DataBind();
rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, System.Web.HttpContext.Current.Response, false, "Laporan");
con.Close();
}
我的数据集名称是 LapBulanan.xsd 并且包含数据表名称 LaporanBulanan(Judul、Peminjam、Pinjam、Kembali)
当我调试这个程序时,我得到了一条错误消息 "The source contains no DataRows" 但是当我检查这个查询时,我得到了正确的记录
当我删除 "rpt.SetDataSource(dt.CopyToDataTable());" 这个 crystal 报告时 运行 很好,但我的报告没有记录
谢谢你的好意
首先,包含 SQL 查询结果的 dtReturn
数据表从未被使用。相反,您正在使用的 dtTemp
数据表不包含任何数据,因为您只是为其分配了一个 dt
数据表的空实例。
foreach 循环根本不执行任何操作,因为它只是将值分配给 4 个变量,这些变量在每次迭代中都会发生变化,之后再也不会被使用。
报表的数据源不需要设置两次。
所以我认为代码应该是这样的
protected void Page_Load(object sender, EventArgs e)
{
DataTable dtReturn = new DataTable();
SqlConnection con = data.getKoneksi();
con.Open();
SqlCommand Perintah = new SqlCommand();
Perintah.Connection = con;
Perintah.CommandText = "SELECT DISTINCT Peminjaman.Katalog, Peminjaman.Pinjam, Peminjaman.Kembali, Pengguna.Nama, Buku.Judul, Buku.Jumlah, Temp.Kembali AS HrsKbl FROM Peminjaman INNER JOIN Buku INNER JOIN Temp ON Buku.ID = Temp.ID ON Peminjaman.Katalog = Buku.ID AND Peminjaman.Katalog = Temp.ID INNER JOIN Pengguna ON Peminjaman.Peminjam = Pengguna.NIS WHERE Peminjaman.Status = 'dipinjam' ORDER BY Kembali ASC";
SqlDataAdapter Adapter = new SqlDataAdapter();
Adapter.SelectCommand = Perintah;
Adapter.Fill(dtReturn);
ReportDocument rpt = new Laporan();
rpt.Load(Server.MapPath("~/Laporan.rpt"));
rpt.SetDataSource(dtReturn);
CrystalReportViewer1.ReportSource = rpt;
CrystalReportViewer1.DataBind();
rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, System.Web.HttpContext.Current.Response, false, "Laporan");
con.Close();
}
我在使用 crystal 报告
进行报告时遇到了问题这是我的代码
protected void Page_Load(object sender, EventArgs e)
{
string Judul, Peminjam, Pinjam, Kembali;
DataTable dtReturn = new DataTable();
SqlConnection con = data.getKoneksi();
con.Open();
SqlCommand Perintah = new SqlCommand();
Perintah.Connection = con;
Perintah.CommandText = "SELECT DISTINCT Peminjaman.Katalog, Peminjaman.Pinjam, Peminjaman.Kembali, Pengguna.Nama, Buku.Judul, Buku.Jumlah, Temp.Kembali AS HrsKbl FROM Peminjaman INNER JOIN Buku INNER JOIN Temp ON Buku.ID = Temp.ID ON Peminjaman.Katalog = Buku.ID AND Peminjaman.Katalog = Temp.ID INNER JOIN Pengguna ON Peminjaman.Peminjam = Pengguna.NIS WHERE Peminjaman.Status = 'dipinjam' ORDER BY Kembali ASC";
SqlDataAdapter Adapter = new SqlDataAdapter();
Adapter.SelectCommand = Perintah;
Adapter.Fill(dtReturn);
LapBulanan.LaporanBulananDataTable dt = new LapBulanan.LaporanBulananDataTable();
foreach (DataRow dr in dtReturn.Rows)
{
Judul = dr["Judul"].ToString();
Peminjam = dr["Nama"].ToString();
Pinjam = dr["Pinjam"].ToString();
Kembali = dr["Kembali"].ToString();
}
DataTable dtTemp = dt;
ReportDocument rpt = new Laporan();
rpt.Load(Server.MapPath("~/Laporan.rpt"));
rpt.SetDataSource(dtTemp);
rpt.SetDataSource(dt.CopyToDataTable());
CrystalReportViewer1.ReportSource = rpt;
CrystalReportViewer1.DataBind();
rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, System.Web.HttpContext.Current.Response, false, "Laporan");
con.Close();
}
我的数据集名称是 LapBulanan.xsd 并且包含数据表名称 LaporanBulanan(Judul、Peminjam、Pinjam、Kembali)
当我调试这个程序时,我得到了一条错误消息 "The source contains no DataRows" 但是当我检查这个查询时,我得到了正确的记录
当我删除 "rpt.SetDataSource(dt.CopyToDataTable());" 这个 crystal 报告时 运行 很好,但我的报告没有记录
谢谢你的好意
首先,包含 SQL 查询结果的 dtReturn
数据表从未被使用。相反,您正在使用的 dtTemp
数据表不包含任何数据,因为您只是为其分配了一个 dt
数据表的空实例。
foreach 循环根本不执行任何操作,因为它只是将值分配给 4 个变量,这些变量在每次迭代中都会发生变化,之后再也不会被使用。
报表的数据源不需要设置两次。
所以我认为代码应该是这样的
protected void Page_Load(object sender, EventArgs e)
{
DataTable dtReturn = new DataTable();
SqlConnection con = data.getKoneksi();
con.Open();
SqlCommand Perintah = new SqlCommand();
Perintah.Connection = con;
Perintah.CommandText = "SELECT DISTINCT Peminjaman.Katalog, Peminjaman.Pinjam, Peminjaman.Kembali, Pengguna.Nama, Buku.Judul, Buku.Jumlah, Temp.Kembali AS HrsKbl FROM Peminjaman INNER JOIN Buku INNER JOIN Temp ON Buku.ID = Temp.ID ON Peminjaman.Katalog = Buku.ID AND Peminjaman.Katalog = Temp.ID INNER JOIN Pengguna ON Peminjaman.Peminjam = Pengguna.NIS WHERE Peminjaman.Status = 'dipinjam' ORDER BY Kembali ASC";
SqlDataAdapter Adapter = new SqlDataAdapter();
Adapter.SelectCommand = Perintah;
Adapter.Fill(dtReturn);
ReportDocument rpt = new Laporan();
rpt.Load(Server.MapPath("~/Laporan.rpt"));
rpt.SetDataSource(dtReturn);
CrystalReportViewer1.ReportSource = rpt;
CrystalReportViewer1.DataBind();
rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, System.Web.HttpContext.Current.Response, false, "Laporan");
con.Close();
}