水晶报表的一般概念
水晶报表的两种模式:
- 拉 PULL:设置好数据连接之后,使用水晶报表文件中所使用的获得数据的方式,由水晶报表自己解决数据获取操作。
- 推 PUSH:使用DataSet装载数据,然后填充到水晶报表中,再按照水晶报表的格式来展示。
数据库:PostgreSQL
引用头文件:
using Npgsql;//下载并引用Npgsql.dll
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
添加三个文件,一个Form1窗体,一个CrystalReport水晶报表,一个DataSet1数据集
首先新建一个结果集,格式为“DataSet1.xsd”,把我们的动态结果集和传给这个文件,而且在xsd中加入我们要使用的列(注意:这里加入的列名称必须和我们后台查询时使用的列名一致),然后在报表文件中选择数据源,加入我们需要使用的数据库字段,就建立了后台结果集和前台报表的连接,就可以解决“该报表不包含表”的错误。(将要显示的字段添加到CrystalReport水晶报表中)
private NpgsqlConnection npgsqlCon = null;
private NpgsqlCommand npgsqlComd = null;
private void button1_Click(object sender, EventArgs e)
{
string strConnection = "Server=127.0.0.1;Port=5432;User Id=sa;Password=sa;Database=E2COS_LS_DB;";
string sqlCMD = "SELECT * FROM \"DiagInfo\" ";
DataSet ds=QueryDB(sqlCMD,strConnection);//这里也可以写成DataSet1,
ReportDocument myReport = new ReportDocument();
string reportPath = @"E:\code\solimi\solimi\CrystalReport1.rpt";
myReport.Load(reportPath);
//绑定数据集,注意,一个报表用一个数据集。
myReport.SetDataSource(ds);
crystalReportViewer1.ReportSource = myReport;//Form1窗体上拖入crystalReportViewer控件,预览
}
public DataSet QueryDB(string sqlCMD, string strConnection)
{
DataSet ds = new DataSet();
DataTable dt = new DataTable();
if (npgsqlCon == null)
{
npgsqlCon = new NpgsqlConnection(strConnection);
npgsqlCon.Open();
}
else
{
if (npgsqlCon.State != ConnectionState.Open)
{
npgsqlCon = new NpgsqlConnection(strConnection);
npgsqlCon.Open();
}
}
NpgsqlDataAdapter da = new NpgsqlDataAdapter(sqlCMD, npgsqlCon);
ds.Reset();
da.Fill(ds, "DiagInfo"); //
da.Dispose();
return ds;
}
参考:
『水晶报表』使用 水晶报表 实现打印