我在窗体里生成了dataset1,然后添加的水晶报表,使用报表专家,在数据中选择项目数据,再选择ado.net数据集,来做的报表,代码不分是这样的:
this.Cursor = Cursors.WaitCursor;
CrystalDecisions.CrystalReports.Engine.ReportDocument crpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
crpt.Load(@"F:\accessnumber1\accessnumber\Cry.rpt");
//Ds是dataSet1
crpt.SetDataSource(this.Ds);
this.crystalReportViewer1.ReportSource =crpt;
this.Cursor = Cursors.Arrow;
问题1:提示说,在form1下并为定义dataset1。
    2:为什么每次运行窗体老是跳出一个数据库登陆窗体。
请大家帮帮我,谢谢。

解决方案 »

  1.   

    数据源的问题,我最开始也是碰到同样问题,我是这样测试的,并花掉我两天时间。先用代码来生成一个表,写上几行,作为报表的源,发现报表可以正常显示,也就是说报表部分没问题。再从DATSET中取表,作为数据源,问题出现,换用ADO,显示正常,但感觉不爽,问题还是在数据源上。现在我用XML作为设计时的源,再在运行时,用DATASET中的表填充,感觉还不太对,但用起来是没问题的。上面是我的一次解决的过程,希望对你有帮助。
      

  2.   

    谢谢follyfour朋友,要是能提供一个案例看看就好了。
      

  3.   

    以下是我常用的方法,你可以试试看:
    1。这是第一个Form其中得到需要打印的DataSet数据源,将它以及做好的报表的路径等传送给第二个Form
    private void btPreview_Click(object sender, System.EventArgs e)
    {
    PrintOrPreViewReport(false);}
    private void PrintOrPreViewReport(bool bPrint)
    {
    if(dsPatient.Tables[0].Rows.Count<=0)
    {
    MessageBox.Show("当前没有可供打印的记录,请先选择条件并执行查询动作之后再打印。",this.Text);
    return;
    }
    //下面这行代码在你设计报表之前生成XML文件,你可以用该文件作为数据源来设计报表,之后这行代码就可以注释掉,以后在程序运行时将得到的DataSet作为数据源传给报表就可以,而且没有需要密码登录的问题
    //dsPatient.WriteXml(SysInfo.sReportPath+@"YSYY.xml",System.Data.XmlWriteMode.WriteSchema);
    string[] sParametername =new string[3]{"companyname","datefrom","dateto"};
    string[] sParametervalue =new string[3]{"","",""};
    sParametervalue[0]=SysInfo.sConame;
    sParametervalue[1]=(dtDateFr.Checked)?dtDateFr.Value.ToShortDateString():"";
    sParametervalue[2]=(dtDateTo.Checked)?dtDateTo.Value.ToShortDateString():"";
    new frmReport(bPrint,"BRYY.RPT",sParametername,sParametervalue,dsPatient).ShowDialog();}2。第二个Form中有一个只有crystalReportViewer1控件
    private bool bPrint=false;
    private string sReportname="";
    private string[] sParametername;
    private object[] sParametervalue;
    private DataSet dsReport;
    private void frmReport_Load(object sender, System.EventArgs e)
    {
    if(bPrint)this.Opacity =0;
    else this.WindowState =System.Windows.Forms.FormWindowState.Maximized; 

    CrystalDecisions.CrystalReports.Engine.ReportDocument doc=new CrystalDecisions.CrystalReports.Engine.ReportDocument();
    doc.Load(SysInfo.sReportPath+sReportname);
    if(dsReport != null)doc.SetDataSource(dsReport.Tables[0]);
    if(sReportname.StartsWith("CaseReport"))
    {
    doc.OpenSubreport("CaseSubReport1").SetDataSource(dsReport.Tables["procsk"]);
    doc.OpenSubreport("CaseSubReport2").SetDataSource(dsReport.Tables["pathdrug"]);
    } if(sParametername!=null)
    {
    for(int i=0;i<sParametername.Length;i++)
    {
    try
    {
    doc.SetParameterValue(sParametername[i],sParametervalue[i]);
    }
    catch(Exception ee)
    {
    MessageBox.Show("字段名称:"+sParametername[i]+"。"+ee.Message);
    }
    }
    }
    this.crystalReportViewer1.ReportSource=doc;
    this.crystalReportViewer1.RefreshReport();
    if(bPrint)
    {
    this.crystalReportViewer1.PrintReport();
    this.Close();
    }
    }private void btExit_Click(object sender, System.EventArgs e)
    {
    this.Close();
    this.Dispose();
    }
    }