1.建立一个dataset (.xsd)文件。在里面指定了一个表“DBFX”,和5个字段(随便起的)。我的文件的xml语法如下: <?xml version="1.0" encoding="utf-8" ?> <xs:schema id="dsduibifenxi" targetNamespace="http://tempuri.org/dsduibifenxi.xsd" elementFormDefault="qualified" attributeFormDefault="qualified" xmlns="http://tempuri.org/dsduibifenxi.xsd" xmlns:mstns="http://tempuri.org/dsduibifenxi.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> <xs:element name="dsduibifenxi" msdata:IsDataSet="true"> <xs:complexType> <xs:choice maxOccurs="unbounded"> <xs:element name="DBFX"> <xs:complexType> <xs:sequence></xs:sequence> <xs:attribute name="jsrq" type="xs:string" /> <xs:attribute name="bm" type="xs:string" /> <xs:attribute name="sm" type="xs:string" /> <xs:attribute name="sdfl" type="xs:string" /> <xs:attribute name="DT" type="xs:decimal" /> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> </xs:element> </xs:schema>2.以这个数据集为数据源建立水晶报表rpt文件duibifenxi.rpt。3.动态用dataset传递数据源。语法(C#)如下: duibifenxi crObject = new duibifenxi(); //生成水晶报表的对象 //下面生成一个dataset作为数据源(注意,我没有使用第一步的ds,而是动态新建了一个) System.Data.OleDb.OleDbDataAdapter objNew= new System.Data.OleDb.OleDbDataAdapter("select aa as jsrq,bb as bm,cc as sm,dd as sdfl ,ee as dt from dual",strConnection); //strConnection 是连接字符串,ds中的字段名必须和事先定义的ds中的一致 DataSet dsNew = new DataSet(); objNew.Fill(dsNew,"DBFX");crObject.SetDataSource(dsNew); //设置数据源 crvShowSjbb.ReportSource = crObject; //crvShowSjbb 是水晶报表的viewer大功告成!
zhangbat(jim.) : 按里的说法是不是在水晶报表里,只需要XSD这个表结构,做为一个临时的数据源,假设名为叫TempDataSet在程序运行动态动态生成的这个DataSet,叫RunDataSet只要将ReportDocument.SetDataSource(RunDataSet)指定后,报表就可以自动的查询这个动态的数据集的数据了 还有你写的,这一部分我不是很理解 -------------------------------------------------------- System.Data.OleDb.OleDbDataAdapter objNew= new System.Data.OleDb.OleDbDataAdapter("select aa as jsrq,bb as bm,cc as sm,dd as sdfl ,ee as dt from dual",strConnection); //strConnection 是连接字符串,ds中的字段名必须和事先定义的ds中的一致 -------------------------------------------------------- 你是用已存在的Dual这个表里的数据去,填充dataset (.xsd)文件里的表“DBFX”,我想知道这个适配器是如何跟"DBFX"这个表关联的我的问题可能很菜,请原谅,可是我真的不懂,拜托拜托帮帮忙,我可以另外送分,要多少都可以
报表名为 CrystalReport2 ; CrystalReport2 crobj = new CrystalReport2(); sqlCommand1.CommandText = "select aa,bb,cc from temptab"; SqlDataAdapter dAdp = new SqlDataAdapter(sqlCommand1.CommandText,sqlConnection1); DataSet DataSet1 = new DataSet(); dAdp.Fill(DataSet1); crobj.SetDataSource(DataSet1); CrystalReportViewer1.ReportSource = crobj; CrystalReportViewer1.DataBind();我这样写会有问题吗?为什么会报无效的报表源错误"Invalid Report Source",我加入报表CrystalReport2到WEB窗体的时候,用的是强类型
我知道有ReportDocument.SetDataSource(DataSet)这个方法
但是这个报表数据设定了后,怎样对应CrystalReport,报表怎么知道,读这个DataSet的数据???????
先建立一个数据集,这个数据集包涵了所有你的水晶报表需要的字段,可以从数据库表中取,也可以随便自己写。
然后根据你的数据集建立水晶报表rpt文件。
然后在代码中动态产生数据集填充水晶报表对象。
这种方法我最喜欢,因为水晶报表可以复用
下面附代码和简要说明:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema id="dsduibifenxi" targetNamespace="http://tempuri.org/dsduibifenxi.xsd" elementFormDefault="qualified" attributeFormDefault="qualified" xmlns="http://tempuri.org/dsduibifenxi.xsd" xmlns:mstns="http://tempuri.org/dsduibifenxi.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="dsduibifenxi" msdata:IsDataSet="true">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="DBFX">
<xs:complexType>
<xs:sequence></xs:sequence>
<xs:attribute name="jsrq" type="xs:string" />
<xs:attribute name="bm" type="xs:string" />
<xs:attribute name="sm" type="xs:string" />
<xs:attribute name="sdfl" type="xs:string" />
<xs:attribute name="DT" type="xs:decimal" />
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>2.以这个数据集为数据源建立水晶报表rpt文件duibifenxi.rpt。3.动态用dataset传递数据源。语法(C#)如下:
duibifenxi crObject = new duibifenxi(); //生成水晶报表的对象
//下面生成一个dataset作为数据源(注意,我没有使用第一步的ds,而是动态新建了一个)
System.Data.OleDb.OleDbDataAdapter objNew= new System.Data.OleDb.OleDbDataAdapter("select aa as jsrq,bb as bm,cc as sm,dd as sdfl ,ee as dt from dual",strConnection); //strConnection 是连接字符串,ds中的字段名必须和事先定义的ds中的一致
DataSet dsNew = new DataSet();
objNew.Fill(dsNew,"DBFX");crObject.SetDataSource(dsNew); //设置数据源
crvShowSjbb.ReportSource = crObject; //crvShowSjbb 是水晶报表的viewer大功告成!
按里的说法是不是在水晶报表里,只需要XSD这个表结构,做为一个临时的数据源,假设名为叫TempDataSet在程序运行动态动态生成的这个DataSet,叫RunDataSet只要将ReportDocument.SetDataSource(RunDataSet)指定后,报表就可以自动的查询这个动态的数据集的数据了
还有你写的,这一部分我不是很理解
--------------------------------------------------------
System.Data.OleDb.OleDbDataAdapter objNew= new
System.Data.OleDb.OleDbDataAdapter("select aa as jsrq,bb as bm,cc as sm,dd as sdfl ,ee as dt from dual",strConnection); //strConnection 是连接字符串,ds中的字段名必须和事先定义的ds中的一致
--------------------------------------------------------
你是用已存在的Dual这个表里的数据去,填充dataset (.xsd)文件里的表“DBFX”,我想知道这个适配器是如何跟"DBFX"这个表关联的我的问题可能很菜,请原谅,可是我真的不懂,拜托拜托帮帮忙,我可以另外送分,要多少都可以
CrystalReport2 crobj = new CrystalReport2();
sqlCommand1.CommandText = "select aa,bb,cc from temptab";
SqlDataAdapter dAdp = new SqlDataAdapter(sqlCommand1.CommandText,sqlConnection1);
DataSet DataSet1 = new DataSet();
dAdp.Fill(DataSet1);
crobj.SetDataSource(DataSet1);
CrystalReportViewer1.ReportSource = crobj;
CrystalReportViewer1.DataBind();我这样写会有问题吗?为什么会报无效的报表源错误"Invalid Report Source",我加入报表CrystalReport2到WEB窗体的时候,用的是强类型
是想说明一件事:你的数据从哪个表取出,从多少个表取出的我都不管,只要最终它的字段名称和xsd文件指定的一致就成(用as的方法)。
所以在后面的fill()方法中我指定了填充的表名称为“DBFX” (注意,不是说我从数据库表“DBFX”中取数据,而是说我把数据放在ds中,然后给它起名“DBFX”便于以后使用)所以你的程序报错可能是fill()方法中没有指明填充的表。还有后面的绑定方法,没有必要用的,我就从来不用,呵呵对了,帮忙解释一下,什么是强类型呀 ?
我想问问你有没有现成的程序,运行通过的例子,Mail给我瞧瞧吧
[email protected]