解决水晶报表出现登陆框的问题

    技术2022-05-11  48

    你最好还是用sql连接,因为oledb和sql的连接信息不是一样的.

    如果你用的是水晶报表的推模式,一般不用设置登陆信息,但是要这样写:obj.SetDataSource(this.ds.Tables["tablename"]);如果你写成了obj.SetDataSource(this.ds)就会有登陆框的。

    如果你用的是水晶报表的拉模式,你就一定要写上登陆信息:

    crReportDocument = new OracleReport();

       //Set the crConnectionInfo with the current values stored in the report   crConnectionInfo = crReportDocument.Database.Tables[0].LogOnInfo.ConnectionInfo;

       /* Populate the ConnectionInfo Objects Properties with the appropriate values for   the ServerName, User ID, Password and DatabaseName. However, since Oracle    works on Schemas, Crystal Reports does not recognize or store a DatabaseName.    Therefore, the DatabaseName property must be set to a BLANK string. */   crConnectionInfo.DatabaseName = "";   crConnectionInfo.ServerName = "Your Server Name";   crConnectionInfo.UserID = "Your User ID";   crConnectionInfo.Password = "Your Password";

       //Set the CrDatabase Object to the Report's Database   crDatabase = crReportDocument.Database;

       //Set the CrTables object to the Tables collection of the Report's dDtabase   crTables = crDatabase.Tables;

       //Loop through each Table object in the Tables collection and apply the logon info   //specified ealier. Note this sample only has one table so the loop will only execute once   foreach (Table crTable in crTables)   {    crTableLogOnInfo = crTable.LogOnInfo;    crTableLogOnInfo.ConnectionInfo = crConnectionInfo;    crTable.ApplyLogOnInfo (crTableLogOnInfo);

        // if you wish to change the schema name as well, you will need to set Location property as follows:    // crTable.Location = "<new schema name>." + crTable.Name;   }

       //Set the ReportSource of the CrystalReportViewer to the strongly typed Report included in the project   crystalReportViewer1.ReportSource = crReportDocument;

    还有一点要注意:如果你用到了子报表,一定要处理:

    //Go through each sections in the main report and identify the subreport by name   crSections = crReportDocument.ReportDefinition.Sections;

       foreach(Section crSection in crSections)   {    crReportObjects = crSection.ReportObjects;    //loop through all the report objects to find all the subreports    foreach(ReportObject crReportObject in crReportObjects)    {     if (crReportObject.Kind == ReportObjectKind.SubreportObject)     {      //you will need to typecast the reportobject to a subreport       //object once you find it      crSubreportObject = (SubreportObject)crReportObject;

          //open the subreport object      crSubReportDoc = crSubreportObject.OpenSubreport(crSubreportObject.SubreportName);      //Once the correct subreport has been located pass it the       //appropriate dataset      if(crSubReportDoc.Name == "FirstSub")       {       //crSubReportDoc.Database.Tables[0].SetDataSource(ds);       crSubReportDoc.SetDataSource(ds);      }     }    }   }   crystalReportViewer1.ReportSource = crReportDocument;

    同样crSubReportDoc.SetDataSource(ds);改为:crSubReportDoc.SetDataSource(ds.Tables["tablename"]);

    http://dev.csdn.net/develop/article/76/76324.shtm


    最新回复(0)