我也只能给你以下建议:(昨晚你没上网,所以没说)
一、你新建一个项目。(我不知你是WEB还是WIN的,WIN的好操作多了,现在WEB的为例)
二、你在页面放个DataAdapter,在查询生成器把你的查询语句加好,你所要建的水晶报表的那一部分的(包括联接)!
三、点击DataAdapter生成数据集,这样就把一个数据集加到了项目中,你可以创建水晶报表。
四、水晶报表的数据源要为“项目数据”,ADO。NET数据集,“项目”,“所创的连接”
五、在项目中把一些查询的数据源填充到水晶报表,并指定VIEW的报表源是当前水晶报表实例!这样就可以了,你要尽量保证填充的数据在创建了的DataSet1中

解决方案 »

  1.   

    我刚试了,用水晶报表添加数据库的OLE DB把数据据源指定,创建报表,后面直接填充进去就行
      

  2.   

    OLE DB的容器是很大的,不象你,小里小气!
      

  3.   

    s_x_d(补穿内酷) 
    我就是小气怎么了?
    我乐意!!!
    你少跑这来捣乱!
    讨厌!!!
      

  4.   

    lihao_ningxia() 
    我用你说的方法,怎么在运行时提示数据库登录啊?
    而且我输入服务器名和数据库名总提示登录失败!
      

  5.   

    水晶报表没有把数据库的登陆账号和密码记住
    需在程序中声明
    如果数据库密码为空的话(我的测试是user id=sa;pwd=)可以直接使用下面代码:
    CrystalReportViewer1.ReportSource = Server.MapPath("cr1.rpt");
    CrystalReportViewer1.DataBind();如果数据库密码不为空的话,则应该添加以下代码安全登陆:ReportDocument Report = new ReportDocument();
    Report.Load(Server.MapPath("cr1.rpt"));
    TableLogOnInfo logOnInfo = new TableLogOnInfo();//对报表中的每个表进行循环
    for(int i=0;i==Report.DataBase.Tables.Count-1;i++)
    {
       logOnInfo.ConnectionInfo.UserId = "sa";
       logOnInfo.ConnectionInfo.Password = "yourpwd";
       Report.DataBase.Tables[i].ApplyLogOnInfo(logOnInfo);
    }
    CrystalReportViewer1.ReportSource = Report;
    CrystalReportViewer1.DataBind();
    //当然如果密码为空的话也同样可以使用这种方法的以上代码需要
    using CrystalDecisions.CrystalReports.Engine;
    using CrystalDecisions.Shared;
    你试试!
      

  6.   

    我的做法是这样的:
    先在添加新项中添加一个CrystalReport1,是用报表专家设计的,然后在查询按钮的单击事件下,写入下面代码:
    int xlmonth = Convert.ToInt32 (comboBox1.Text); 
    string sql ="select month(zgl.xltime) xlmonth, category.name,zone.zonename,zgl.zgl/zgl.xls zgl  from zgl,tree,category,zone where zgl.treeid=tree.treeid and tree.categoryid= category.categoryid and tree.zoneid=zone.zoneid and  month(zgl.xltime)="+xlmonth+" and zone.zonename='"+comboBox2.Text+"' and category.name='"+comboBox3.Text+"'" ;
    SqlCommand  selectcommand1 = new SqlCommand (sql,MDImain.objconn );
    objad.SelectCommand = selectcommand1;
    objad.Fill (ds,"qlz");
    CrystalReport2 report = new CrystalReport2 ();
    report.SetDataSource (ds);
    crystalReportViewer1.ReportSource = report;
    但在点击查询按钮后报表显示的是所有的记录,并没有按我的查询条件来显示,请问是怎么回事呢?
      

  7.   

    1,添加新项,选择添加数据集
    1、在数据集,包含你查询出来的数据字段及数据表
    2、做报表时,使用前面做好的数据集里面得表和字段。
    代码:
    SqlDataAdapter myCommand = new SqlDataAdapter(strSql, myConnection);
    dsRpt ds = new dsRpt(); 
    myCommand.Fill(ds,"RygzlCx");
    rptRygzl RptDoc=new  rptRygzl(); 
    RptDoc.SetDataSource(ds); 
    rptView.ReportSource =RptDoc;
    rptView.DataBind(); 
    dsRpt 为你新建数据集得名称
    rptRygzl为你建立得报表名称
    rptView为报表控件
    strSql为查询语句
      

  8.   

    我用你说的方法,怎么在运行时提示数据库登录啊?
    而且我输入服务器名和数据库名总提示登录失败!出现那样得错误是你得数据库有密码,你可以按照: lihao_ningxia() ( ) 的方法解决!
      

  9.   

    我按照西北风说的去做了,细节如下:
    1 在添加新项中添加数据集Dataset1,然后添加数据连接,将所用到的表都拖到Dataset1中
    2 在添加新项中添加CrystalReport1数据源选择Dataset1并选择要显示和字段和用公式生成想要的字段值
    3 在查询按钮中添写代码:
    int xlmonth = Convert.ToInt32 (comboBox1.Text); 
    string sql ="select month(zgl.xltime) xltime, category.name name,zone.zonename zonename,zgl.zgl/zgl.xls zgl  from zgl,tree,category,zone where zgl.treeid=tree.treeid and tree.categoryid= category.categoryid and tree.zoneid=zone.zoneid and  month(zgl.xltime)="+xlmonth+" and zone.zonename='"+comboBox2.Text+"' and category.name='"+comboBox3.Text+"'" ;
    SqlCommand  selectcommand1 = new SqlCommand (sql,objconn );
    objad.SelectCommand = selectcommand1;
    CrystalReports.Dataset2  ds = new CrystalReports .Dataset2 ();
    objad.Fill (ds,"qlz");
    CrystalReport2 report = new CrystalReport2 ();
    report.SetDataSource (ds);
    crystalReportViewer1.ReportSource = report;
    注:我在生成报表时的字段名称和在SQL语句中的字段名称是一样的在运行时选择查询条件后点击查询按钮却只显示报表的表头和字段名,没有数据,是怎么回事呢?
    劳烦各位高手顶力相助,谢谢了!
      

  10.   

    我试了一下单表查询,是可行的,于是我将多表查询写成存储过程,准备把存储过程拖入数据集,但提示说不能解释XML架构,该怎样用存储过程呢?