水晶报表生成数据有两种模式,拉模式是在创建报表时指定数据库连接及要显示的内容,是不能从一个报表文件满足多个查询条件的显示的,而推模式可以(关于这两种模式,[url=http://blog.csdn.net/mybabyes/archive/2009/07/29/4392297.aspx]链接网站[/url]上有详细介绍).我在使用推模式时,是想先建立一个空白的报表文件,然后在程序中为其填充数据我是如下实现的:
开发环境是VS 2005,数据库是SQL 2000,报表文件是通过添加新项,在模板中选择的.
SqlConnection con = new SqlConnection(this.m_strcon);
con.Open();
string strName = this.m_CurrentNode.Text;
DateTime dtBegin = dateTimePicker1.Value;
DateTime dtEnd = dateTimePicker2.Value;
strsql = "select Name,AirFlagOn,AirTime from tb_AirRealData where Name='" + strName + "' and (AirTime between '" + dtBegin + "' and '" + dtEnd + "')";
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter(strsql, con);
da.Fill(ds);
DataTable dt = ds.Tables[0];
int nCount = dt.Rows.Count;
CrystalReport2 cr = new CrystalReport2();
cr.Load(Application.StartupPath + "CrystalReport2.rpt");
cr.SetDataSource(ds);//此位置报错
this.crv_HistoryData.ReportSource = cr;
但早会有异常:[CrystalDecisions.CrystalReports.Engine.DataSourceException] = {"该报表不包含表。"}
调试中dataset中是有数据的,问题应当是空白报表CrystalReport2 的问题,请教一下,问题在哪儿呢?
尝试过通过报表专家给空报表添加数据表,也不行,而且这样也限制了只能指定数据库连接,而不能使用客户自己数据库.
还是我上面的思路不通呢?
如果为每种查询都创建一个报表文件,会出现两个问题:1,多种查询就需要很多报表文件,这样会影响程序运行速度.2,用拉模式在创建报表文件时就指定数据库连接和表,是视化实现的,不能传入数据库连接的参数,这样在本机上可用,换个电脑,软件就不能运行了,用远程应当不是很方便的.
请教高手给指点一下,谢谢!