最近项目中要用到报表,我还是第一次用那东西,在网上搜了一下,基本上就那几篇文章,看的云里雾里的(再加上自己这几天感冒),只知道报表控件连报表数据源再连报表,还以为在.rpt文件中直接拖了数据集中的字段就能用,但是预览了不知道什么东西,(可能是快放假了,没学习的劲了),请大家帮我理一下asp.net报表开发的大体思路,谢谢啦^_^

解决方案 »

  1.   

    摘要如下:1。第一步是添加新项CrystalReport12。在CrystalReport1.rpt面页右键选择:”数据库”à”添加/删除数据库”出现下面对话框:然后点开OLE DB(ADO)的加号,将弹出选择数据库的对话框其中”项目数据”里面的”当前连接”显示的就是OLE DB(ADO)的连接,这样就可以将表添加到右边的”选定的表”中了(切记:不要既从”OLE DB” 中选表或命令又从”当前连接”中选,如果你用了数据集,也是一样的道理,否则全提示出”登陆失败”的错误!)3。字段资料管理器里面”数据库字段”里把字段直接拖到CrystalReport.rpt里面了.布置好布局.4。回到WebForm1.aspx页面,选择控件CrystalReportViewer将其放到页面上。5。代码
    using CrystalDecisions.Shared;using CrystalDecisions.CrystalReports.Engine;在WebForm1.aspx.cs的Form_Load里面添加代码:TableLogOnInfo logOnInfo = new TableLogOnInfo();              ReportDocument rpdMy0= new ReportDocument();              logOnInfo.ConnectionInfo.ServerName = "NNN";              logOnInfo.ConnectionInfo.Password="dong";              logOnInfo.ConnectionInfo.DatabaseName="Lab";              logOnInfo.ConnectionInfo.UserID = "sa";               String path = Server.MapPath("CrystalReport2.rpt");              rpdMy0.Load(path);              rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);              CrystalReportViewer1.ReportSource = rpdMy0;其中:TableLogOnInfo类是: 提供属性,以便检索和设置表连接选项.它有一个连接的属性ConnectionInfo,用来设置与数据库的连接.如上面的ServerName等.生成一个报表文档对象将前面我们做好的那个CrystalReport1.rpt赋给它.在这里要注意的是Database属性!然后把报表对象做为CrystalReportViewer1的数据源.或者,获得数据库的方法改为直接从数据库获得DataSet
    using System.Data.SqlClient;
    using System.Collections.Specialized;string strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString();
       using (SqlConnection conn = new SqlConnection(strConn))
       {
           SqlDataAdapter da = new SqlDataAdapter(strSQL,conn);//strSQL是SQL语言"select * from dbo.table1"
           DataSet ds=new DataSet();
           da.Fill( ds);
           CrystalReport1 cr1 = new CrystalReport1();
           cr1.SetDataSource( ds);
           CrystalReportViewer1.ReportSource = cr1;   }
      

  2.   

    没有连接数据源啊
    string   strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString(); 这段代码中的DB是要在WebConfig中设置的
      

  3.   

    在Web.Config中如下设置
    <configuration>
    <appSettings>
        <add key="DB" value="Server='IP地址';Database='数据源';UID='用户名';PWD='密码';Application Name='你所应用的项目'">
        </add>
    </appSettings>
    </configuration>
      

  4.   

    我仿写了他的那一段:
    5。代码using   CrystalDecisions.Shared; using   CrystalDecisions.CrystalReports.Engine; 在WebForm1.aspx.cs的Form_Load里面添加代码: TableLogOnInfo   logOnInfo   =   new   TableLogOnInfo();                             ReportDocument   rpdMy0=   new   ReportDocument();                             logOnInfo.ConnectionInfo.ServerName   =   "NNN";                             logOnInfo.ConnectionInfo.Password="dong";                             logOnInfo.ConnectionInfo.DatabaseName="Lab";                             logOnInfo.ConnectionInfo.UserID   =   "sa";                               String   path   =   Server.MapPath("CrystalReport2.rpt");                             rpdMy0.Load(path); 
                                rpdMy0.Database.Tables[0].ApplyLogOnInfo(logOnInfo);                             CrystalReportViewer1.ReportSource   =   rpdMy0; 
      

  5.   

    本地SQL:       
        string       strConn="server=local(或本地機器名);database=数据库名;uid=实际用户名;pwd=密码;";   
    網絡中的SQL:       
        string       strConn="server=服務器名(或IP);database=数据库名;uid=实际用户名;pwd=密码;";  
      

  6.   

    private       void       Page_Load(object       sender,       System.EventArgs       e)   
    {   
      string   strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString(); 
          using   (SqlConnection   conn   =   new   SqlConnection(strConn)) 
          { 
                  SqlDataAdapter   da   =   new   SqlDataAdapter(strSQL,conn);//strSQL是SQL语 言"select   *   from   dbo.table1" 
                  DataSet   ds=new   DataSet(); 
                  da.Fill(   ds); 
                                                                                                   
    ReportDocument   reportDemo   =   new   ReportDocument(); 
    reportDemo.Load(Server.MapPath("報表名稱.rpt");); 
    reportDemo.SetDataSource(ds); 
                  
    CrystalReportViewer1.ReportSource   =   reportDemo; 
    CrystalReportViewer1.DataBind();    

    }
    你试下
      

  7.   

    其中1楼讲的5中,是CrystalReportViewer1的数据源绑定的两个方法,第一个我没有接触过,你可以使用第二种,或者我给你的。
    报表很简单,1是布局,2是连接数据源,如果你会布局的话,那应该很容易上手的
      

  8.   

    那么我应该在设计.rpt文件的时候要做些什么呢,比如我只是要一张表显示一下需要的字段,就是在aspx.cs中select查的字段,他们改怎样关联起来呢?谢谢一等一大哥
      

  9.   

    这个你不需要知道他们怎么关联啊,只要按照1楼的说法把要显示的字段在.rpt页面上拉好,直接
    在aspx.cs中select要显示的字段,我给你的代码就是把两者相联系的
      

  10.   

    做报表的一般步骤
    一般要有三支页面: 
            第一支页面是用户操作界面,选择要显示资料的条件。 
            第二支页面只要拉一个CrystalReportViewer控件,只要是根据第一支页面传递过来的条件参数,从数据库中捞取对应的资料,并对第三支页面进行数据库绑定。 
            第三支页面就是你所要显示的资料,拉水晶报表的控件 
            可以找些相关资料看看。
      

  11.   

    <form id="form1" runat="server">
        <div>
            <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true"
                 />
        </div>
        </form>public partial class test_Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
                   string   strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString(); 
          using   (SqlConnection   conn   =   new   SqlConnection(strConn)) 
          { 
                string strSQL = "select * from area";
                  SqlDataAdapter   da   =   new   SqlDataAdapter(strSQL,conn);//strSQL是SQL语 言"select   *   from   dbo.table1" 
                  DataSet   ds=new   DataSet(); 
                  da.Fill(ds); 
                                                                                                   
                    ReportDocument   reportDemo   =   new   ReportDocument(); 
                    reportDemo.Load(Server.MapPath("hgtj.rpt")); 
                reportDemo.SetDataSource(ds); 
                  
                CrystalReportViewer1.ReportSource   =   reportDemo; 
                CrystalReportViewer1.DataBind();    
            }   
        }
    }
    js 是解决方案名称,其中bs_jsw好像是以前拖数据源控件自动生成的吧  <location allowOverride="true" >
               <appSettings>
                   <add key="DB" value="Server='lcg';Database='pdjsw';UID='sa';PWD='123';Application Name='js'"/>
                   <add key="bs_jsw" value="server=lcg; uid=sa; pwd=123; database=pdjsw" />
                   <add key="CrystalImageCleaner-AutoStart" value="true" />
                   <add key="CrystalImageCleaner-Sleep" value="60000" />
                   <add key="CrystalImageCleaner-Age" value="120000" />
               </appSettings>
           </location>
    下面是我在做表单是用的连接字符串:<add name="pdjswConnectionString" connectionString="Data Source=LCG;Initial Catalog=pdjsw;User ID=sa;Password=123" providerName="System.Data.SqlClient"/>
      

  12.   

    我在App_Code文件夹中建了一个DataSet1.xsd,一张area表,然后我在.rpt文件中将需要的字段从那个数据集表中拖进去,拖到‘详细资料’一层,其他的没做什么
      

  13.   

    你把string   strConn=System.Configuration.ConfigurationSettings.AppSettings["DB"].ToString(); 改成
      string   strConn="Server='lcg';Database='pdjsw';UID='sa';PWD='123'";
    试试
    还有我们做报表的时候不是直接从数据库拉字段的,是先建立一个数据集.xsd,然后再.xsd中右击选中DataTable,建立一个数据表,在里面手动添加要显示的字段名称,字段名称跟数据库的字段名称一致,然后在.rpt中连接这个.xsd文件,再把对应的字段拉到页面上,结合我给你的代码就能显示了
      

  14.   

    还是那样子:
    您请求的报表需要更多信息.--------------------------------------------------------------------------------
      DataSet1  
    服务器名:    
    数据库名:    
    用户名:    
    密码:    
     使用集成安全性   
     DataSet1是数据集名
      

  15.   

    DataSet跟数据库是一点联系都没有的,只是栏位名称相同而已
      

  16.   

     reportDemo.SetDataSource(ds); 不小心写错了
    应该是 reportDemo.SetDataSource(ds。table[0]);