首先要建立报表对象,数据集对象(注意密码)
建立dataadapter对象并填充dataset
然后报表的数据源使用填充后的dataset

解决方案 »

  1.   

    填充了DataSet怎么样
    我知道有ReportDocument.SetDataSource(DataSet)这个方法
    但是这个报表数据设定了后,怎样对应CrystalReport,报表怎么知道,读这个DataSet的数据???????
      

  2.   

    我说说我的方法:
    先建立一个数据集,这个数据集包涵了所有你的水晶报表需要的字段,可以从数据库表中取,也可以随便自己写。
    然后根据你的数据集建立水晶报表rpt文件。
    然后在代码中动态产生数据集填充水晶报表对象。
    这种方法我最喜欢,因为水晶报表可以复用
    下面附代码和简要说明:
      

  3.   

    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大功告成!
      

  4.   

    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"这个表关联的我的问题可能很菜,请原谅,可是我真的不懂,拜托拜托帮帮忙,我可以另外送分,要多少都可以
      

  5.   

    报表名为   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窗体的时候,用的是强类型
      

  6.   

    是的,之前建立的xsd文件只是作为一个临时的数据源运行时需要自己组建sql语句生成临时数据源指定的字段至于我的那段代码
    是想说明一件事:你的数据从哪个表取出,从多少个表取出的我都不管,只要最终它的字段名称和xsd文件指定的一致就成(用as的方法)。
    所以在后面的fill()方法中我指定了填充的表名称为“DBFX”  (注意,不是说我从数据库表“DBFX”中取数据,而是说我把数据放在ds中,然后给它起名“DBFX”便于以后使用)所以你的程序报错可能是fill()方法中没有指明填充的表。还有后面的绑定方法,没有必要用的,我就从来不用,呵呵对了,帮忙解释一下,什么是强类型呀 ?
      

  7.   

    我自己也不知道Untyped和Strong有啥区别,我只知道前者可以指定不同的Crystal Report,后者是选定唯一的一个报表我再试试好了,如果还是不行的话,只有再麻烦你了
      

  8.   

    还是不行啊,要么就是Log on Parametr Error!要么就是Query Engine Error!我快要疯掉了
    我想问问你有没有现成的程序,运行通过的例子,Mail给我瞧瞧吧
    [email protected]
      

  9.   

    我终于成功了,zhangbat(jim.) :不用给我发邮件了是我的SQL语句有点问题Happy!