超级强力吧 关注:7贴子:207
  • 5回复贴,共1

水晶报表高手请进,水晶文件怎样使用xml文件作为数据源,急急急,

只看楼主收藏回复

1


1楼2011-10-15 22:16回复
    水晶文件怎样使用xml文件作为数据源
    我想用Dataset读取了一个xml文件,我想把这个Dataset作为ReportDocument的数据源,该怎么做?有了这个ReportDocument后然后付值给CrystalReportView.Reportsource,
    具体如下
    DataSet ds = new DataSet();
    ds.ReadXmlSchema( "a1.xsd ");
    ds.ReadXml( "a2.xml ");
    ReportDocument rd = new ReportDocument();
    rd.Load( "c1.rpt ");
    rd.SetDataSource( ds);
    //ds已经读入了文件数据
    crystalReportView1.Reportsource = rd;
    crystalReportView1.DataBind();
    可是这样做,web page输出说logon on error;
    但是我不是使用数据库,也没有密码和用户,该怎样登陆了


    2楼2011-10-15 22:16
    回复
      这个是否对你有帮助?
      int int_pass = zjmis.pass.pri ( "gs/gscx.aspx ",Session[ "log "].ToString ());
      if (int_pass == -1){Response.Redirect ( "../zhcx.aspx ");}
      if (int_pass == 0)
      {
      Response.Write ( "你无权查看该页! ");
      Response.End ();
      }
      }
      ReportDocument report=new ReportDocument();
      TableLogOnInfo logOnInfo = new TableLogOnInfo ();
      report.Load( "C:\\Inetpub\\wwwroot\\zjmis\\sb\\zjzy_.rpt ");
      logOnInfo.ConnectionInfo.ServerName = Session[ "ServerName "].ToString ();
      logOnInfo.ConnectionInfo.DatabaseName = Session[ "DatabaseName "].ToString ();
      logOnInfo.ConnectionInfo.UserID = Session[ "UserID "].ToString ();
      logOnInfo.ConnectionInfo.Password = Session[ "Password "].ToString ();
      for (int i=0;i <= report.Database.Tables.Count - 1;i++)
      {
      report.Database.Tables [i].ApplyLogOnInfo (logOnInfo);
      }
      crv_ht.ReportSource =report ;
      crv_ht.DisplayGroupTree = false;


      3楼2011-10-15 22:16
      回复
        谢谢你的回复。可是我不大明白。
        CrystalReportView 怎样使用xml数据文件作为数据源呢?
        关于你的代码我有几个问题
        1.zjmis是属于什么类?怎样产生的?
        2.在你代码中我看不出来,什么地方使用读入了xml文件?
        3.如果你没有使用数据库,你的Session[ "ServerName "]、Session[ "UserID "]等变量从那里得到?或者说他们是在那里付值的?
        谢谢你的答复!!!!
        你的代码如下
        int int_pass = zjmis.pass.pri ( "gs/gscx.aspx ",Session[ "log "].ToString ());
        ~~~~~~~~~~~~~~~~~~~~~
        if (int_pass == -1){Response.Redirect ( "../zhcx.aspx ");}
        if (int_pass == 0)
        {
        Response.Write ( "你无权查看该页! ");
        Response.End ();
        }
        }
        ReportDocument report=new ReportDocument();
        TableLogOnInfo logOnInfo = new TableLogOnInfo ();
        report.Load( "C:\\Inetpub\\wwwroot\\zjmis\\sb\\zjzy_.rpt ");
        logOnInfo.ConnectionInfo.ServerName = Session[ "ServerName "].ToString ();
        logOnInfo.ConnectionInfo.DatabaseName = Session[ "DatabaseName "].ToString ();
        logOnInfo.ConnectionInfo.UserID = Session[ "UserID "].ToString ();
        logOnInfo.ConnectionInfo.Password = Session[ "Password "].ToString ();
        for (int i=0;i <= report.Database.Tables.Count - 1;i++)
        {
        report.Database.Tables [i].ApplyLogOnInfo (logOnInfo);
        }
        crv_ht.ReportSource =report ;
        crv_ht.DisplayGroupTree = false;


        4楼2011-10-15 22:16
        回复
          从数据库读入数据和从XML文件读入数据没什么区别,只要在DataSet中生成的Table名和结构是一样的.你没有说明你的报表是怎么设计的.如果是设计的push模式的报表,应该一样也可以运行.你应该先看看用两种方法生成的DataSet是否一样;如果在设计报表时就指定了数据库表和连接,那么,就不应该从XML中读取数据(因为你已经设计成了pull模式的报表).出现这种问题可能是报表执行DataBind方法时自动连接数据库发生错误.


          5楼2011-10-15 22:17
          回复

            推(push)模式
            报表文件生成时只指定需要加载的数据字段,加载的数据内容在程序中生成Dataset,并利用ReportDocument对象的SetDataSource 方法将数据集传递给报表文件。


            6楼2011-10-15 22:23
            回复