我讲一下我的设计过程:
一.建立数据集 revert.xsd
 
    从“服务器资源管理器”中的“SQL Server”中拖放了二张表:GB_LeaveWord,GB_Revert到数据集中此时在数据集中就会有两个表的结构图。 我将GB_LeaveWord.id与GB_Revert.titleid进行了关联二.创建 .rpt 文件 revert.rpt    在里面也选了跟数据集一样的两张表GB_LeaveWord,GB_Revert,在其中选取几个数据字段,三.创建了报表网页:printpdf.aspx在printpdf.aspx上加入CrystalReportViewer,命名为CRV_revert在printpdf.aspx.cs加入如下代码:
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
string str_Filename=Request.QueryString["id"].ToString();
PrintPdf(str_Filename);
}
public void PrintPdf(string filename1)
{     
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["SQLServerConnectionString"]);
string comstr="select GB_LeaveWord.ID,GB_Revert.titleID,GB_LeaveWord.title,GB_LeaveWord.content,GB_LeaveWord.solveContent,GB_Revert.content from GB_LeaveWord,GB_Revert where GB_LeaveWord.ID=GB_Revert.titleID and GB_LeaveWord.ID='"+filename1+"'";
SqlDataAdapter da=new SqlDataAdapter(comstr,myConnection);
DataSet ds=new DataSet();
         myConnection.Open();
da.Fill(ds,"revert");
ReportDocument repDoc= new ReportDocument();
string reportPath = ConfigurationSettings.AppSettings["ReportPath"].ToString();
reportPath +="\\revert.rpt"; 
repDoc.Load(reportPath);
repDoc.SetDataSource(ds); 
this.CRV_revert.ReportSource = repDoc; 
          CRV_revert.DataBind();
}
执行代码出现以下错误异常详细信息: CrystalDecisions.CrystalReports.Engine.LogOnException: 登录失败有高手请给个详细解决方案,这个异常我在Google和百度都搜过有个有号称:
彻底解决 CrystalReports 登录失败问题
http://dev.csdn.net/article/22/22017.shtm本人搞不懂,能给我个简单的处理方法吗,如能解决,分数再加

解决方案 »

  1.   

    加这个
    TableLogOnInfo logon = new TableLogOnInfo();
    logon.ConnectionInfo.ServerName = "Localhost";
    logon.ConnectionInfo.DatabaseName = "CRTestCenter";
    logon.ConnectionInfo.UserID = "sa";
    logon.ConnectionInfo.Password = "xxx";
    ReportDocument rd = new ReportDocument();
    string getCr = Server.MapPath("CrystalReport1.rpt");
    rd.Load(getCr);
    rd.Database.Tables[0].ApplyLogOnInfo(logon);
      

  2.   

    应该字段不与表字段相对应吧,保证xsd中字段与表一致
      

  3.   

    ppp80()说的我试过了,不行,conan19771130说的可能有点道理吧,不过不过能否有更清楚的表述呢?
      

  4.   

    单步调试程序试一下,看看问题在哪一行!另:你的.rpt文件的数据源是选择的xsd文件,还是直接选择的那两个表?
      

  5.   

    数据源要选“更多数据源”-->ADO.NET(XML),然后选择你刚才新建的xsd文件,然后再选择表
      

  6.   

    数据源要选“更多数据源”-->ADO.NET(XML),然后选择你刚才新建的xsd文件,然后再选择表根据一直飞翔说的我将第一步建立的数据源选中,然后在第二步中在.rpt文件中加入数据源选中的表现在换了个错误:查询引擎错误:“F:\yexin\GuestBook\Report\ReportFile\revert.rpt” 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: CrystalDecisions.CrystalReports.Engine.DataSourceException: 查询引擎错误:“F:\yexin\GuestBook\Report\ReportFile\revert.rpt”
      

  7.   

    如果你要用手动建立xsd文件,那么就使用推模式,
    那数据源要选“更多数据源”-->ADO.NET(XML),然后选择你刚才新建的xsd文件,然后再选择表你那种重数据库中拖表的是在拉模式中用的.查询引擎错误的解决:1.根据报表的结构字段,建立一个xsd文件,用来存放数据。2.新建一个报表,注意建立的时候要浏览到该xsd文件,   建好后找到该报表的属性"自定义工具",把原来的  "CrystalDecisions.VSDesigner.CodeGen.ReportCodeGenerator"  改为"CrystalDecisions.VSShell.CodeGen.ReportCodeGenerator"  这样就会产生一个按照你报表名命名的zsmxb.cs文件,其实就是下面的类zsmxb   同时建立一个页面,把CrystalReportViewer控件放到页面,   并且要在该页面文件的顶部申明一下报表的类,   public class Fr_zsmxb : System.Windows.Forms.Form
       {
            zsmxb crReportDocument;       .........3.建立报表结构   DataSet dss=new DataSet();
       DataTable dt=new DataTable("zsmxb");
       dt.Columns.Add("cchbh",System.Type.GetType("System.String"));
       dt.Columns.Add("nglf",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("ncf",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("nqyf",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("nzsf",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("ntcf",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("ngz",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("nzjf",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("nylf",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("nwxf",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("nsy",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("nqtf",System.Type.GetType("System.Decimal"));
       dt.Columns.Add("nxj",System.Type.GetType("System.Decimal"));
       dss.Tables.Add(dt);   注意:这里的DataTable dt=new DataTable("zsmxb");这句中表名"zsmxb"要和你的xsd文件中的表名要一样,  同时,dt的字段名、类型,都要和xsd文件一样,否则回产生"查询引擎错误"。4.为这个ds传入数据   for(int i=0;i<this.ds.Tables["zsmxb"].Rows.Count;i++)
       {
        DataRow dr=dt.NewRow();
        dr["cchbh"]=this.ds.Tables["zsmxb"].Rows[i]["cchbh"];
        dr["nglf"]=this.ds.Tables["zsmxb"].Rows[i]["nglf"];
        dr["ncf"]=this.ds.Tables["zsmxb"].Rows[i]["ncf"];
        dr["nqyf"]=this.ds.Tables["zsmxb"].Rows[i]["nqyf"];
        dr["nzsf"]=this.ds.Tables["zsmxb"].Rows[i]["nzsf"];
        dr["ntcf"]=this.ds.Tables["zsmxb"].Rows[i]["ntcf"];
        dr["ngz"]=this.ds.Tables["zsmxb"].Rows[i]["ngz"];
        dr["nzjf"]=this.ds.Tables["zsmxb"].Rows[i]["nzjf"];
        dr["nylf"]=0;
        dr["nwxf"]=0;
        dr["nsy"]=0;
        dr["nqtf"]=this.ds.Tables["zsmxb"].Rows[i]["nqtf"];
        dr["nxj"]=System.Convert.ToDecimal(dr["nglf"].ToString())+System.Convert.ToDecimal(dr["ncf"].ToString();       dt.Rows.Add(dr);
       } 这里的ds是同过查询得到的,这里只是举个例子。5.把得到的报表数据源dss绑定到水晶报表。   crReportDocument=new zsmxb();
       crReportDocument.SetDataSource(dss);
       crystalReportViewer1.ReportSource = crReportDocument;
     
      

  8.   

    repDoc.SetDataSource(ds);
    ------------
    问题出在这里,应该用表而不是数据集作为参数。
    repDoc.SetDataSource(ds.Tables["revert"]);
      

  9.   

    我现在想将报表用PDF格式打开,然后,
    当我读取一条数据时,PDF格式打不开,要通过刷新才能看到数据,
    当我读取数据库里全部数据时,PDF就可以打开,不用刷新,哪位老鸟知道这个问题解决一下!
      

  10.   

    我设计了一个水晶报表,然后通过程序导成PDF格式在网页上显示当我在用sql语句来获得数据时出现当用select * from GB_LeaveWord 查询数据时报表可以正常导出当用select * from GB_LeaveWord where ID='7'查询数据时报表不能正常显示,只有空白一片,然后我进行刷新一下就可以显示出来,这是为什么呢,我在Page_Load里进行加载 private void Page_Load(object sender, System.EventArgs e)
    { if(!IsPostBack)
    {
    Printpdf("7");
    }
    }private void Page_Load(object sender, System.EventArgs e)
    { Printpdf("7");

    }
    这两种方式都不能好好的显示
    请高手指教!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
      

  11.   

    请保证数据源字段名和xml一致,肯定不一致,我也遇到过