VS2005下水晶报表如何实现动态数据源绑定?

      之前在论坛中经常有人问起在 VS2005 中使用水晶报表( Crystal Report 10 )如何用 DataSet 实现动态的数据源绑定?关于这个问题我研究了一下,找到了新的解决方案。
    在以前 VS2003 中可以采用 PUSH 模式推报表,可以用如下的代码实现:        
   

         con = new SqlConnection(Session["SQLCONNECTION"].ToString());
         strSql 
= "SELECT * FROM htOrder";
         scm 
= new SqlCommand(strSql, con);
         sda 
= new SqlDataAdapter(scm);
         ds 
= new DataSet();
         sda.Fill(ds, 
" order ");
         rptOrder.SetDataSource(ds.Tables[
"order"]);
         crOrder.ReportSource 
= rptOrder;    

         

     // 绑定报表数据
             private   void  BindCrystalReports()
        
{
                
string path1 = Server.MapPath("~//Report//");
                
string path2 = path1 + "repOrder.rpt";
                ReportDocument repDoc 
= new ReportDocument();
                repDoc.Load(path2);
                SetDBLogonForReport(repDoc);          
//设置数据登录信息
                crOrder.ReportSource = repDoc; 
                
string selectionFormula = "{htOrder.htID} =" + txtHtID.Text.Trim();//设置报表数据筛选公式
                repDoc.DataDefinition.RecordSelectionFormula = selectFormula;
                crOrder. DataBind ();     
        }

        
// 设置登录信息
         private   void  SetDBLogonForReport(ReportDocument reportDocument)
    
{
        
try
        
{
                ConnectionInfo connectionInfo 
= new ConnectionInfo();
                connectionInfo.ServerName 
= ConfigurationManager.AppSettings["ServerName"];
                connectionInfo.DatabaseName 
= ConfigurationManager.AppSettings["DatabaseName"];
                connectionInfo.UserID 
= ConfigurationManager.AppSettings["UserID"];
                connectionInfo.Password 
= ConfigurationManager.AppSettings["Password"];
                Tables tables 
= reportDocument.Database.Tables;
               
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
           
{
                    TableLogOnInfo tableLogonInfo 
= table.LogOnInfo;
                    tableLogonInfo.ConnectionInfo 
= connectionInfo;
                    table.ApplyLogOnInfo(tableLogonInfo);
                }

        }

           
catch
      
{
                lblNote.Text 
= "<script>alert('数据库登录信息不正确!');</script>";
           }

}

                  

        1. 建立水晶报表,注意报表要用OLE DB ADO方式连接数据源,这样可以省去报表登录窗口的弹出。
        2. 在设计视图中拖拉报表控件CrystalReportViewer,点击右上角智能标签设置报表数据源,选择报表文件,自动生成CrystalReportSource,这时在设计视图中将显示出报表界面,水晶报表将自动用初始数据填充报表字段。注意这里有个小Bug,如果报表在子目录中,选择报表文件将自动用相对路径表示,这时报表显示会出错,应改成绝对路径才可以。
            <Report FileName="report/rptOrder.rpt">这里应改成:<Report FileName="../report/rptOrder.rpt">
        3.拖拉一个数据源控件SqlDataSource(也可以用ObjectDataSource),按向导生成数据源,这里可以筛选数据,根据情况选择各类数据源。            
        4.如何将CrystalReportSource与SqlDataSource两个控件连接在一起呢?可以这样:选择CrystalReportSource控件点击右侧属性中数据栏,再点击Report选择DataSource,在这个数据源集合编辑器选择数据源指定报表名称即可。(下面的Parameters是用来选择报表参数用的)

        经过这几个步骤,就可以运行程序显示报表啦,怎么样不用写一句代码吧?

具体代码可参考如下: 

< CR:CrystalReportViewer  ID ="crOrder"  runat ="server"  AutoDataBind ="True"   ReportSourceID ="ReportSourceOrder"   BestFitPage ="False"  DisplayToolbar ="False"  DisplayGroupTree ="False"  Height ="1042px"  Width ="775px"  EnableParameterPrompt ="False"   />         
        
< CR:CrystalReportSource  ID ="ReportSourceOrder"  runat ="server" >
            
< Report  FileName ="../report/rptOrder.rpt" >                            
                    
< DataSources >
                            
< CR:DataSourceRef  DataSourceID ="SqlDataSourceOrder"  TableName ="htOrder"   />
                    
</ DataSources >
              
</ Report >
        
</ CR:CrystalReportSource >
        
< asp:SqlDataSource  ID ="SqlDataSourceOrder"  runat ="server"  ConnectionString ="<%$ ConnectionStrings:cc_2005 %>"
            SelectCommand
="SELECT * FROM [htOrder] " ></ asp:SqlDataSource >

 

          在 VS2005 中不再支持“ embedded report ”嵌入式报表, 只能采用非嵌入式报表的方法拉数据,下面是典型的代码:
                 这种方式是不是太频繁琐了,在数据结构更改或者查询条件发生变化时必须要再次更改报表设置,那么在 VS2005 中水晶报表有没有更简洁的方法呢?最好不用写代码就能搞定呢?有,那就是新的数据绑定控件 CrystalReportSource ,这个控件与 SqlDataSource 数据源绑定控件一起连用就可以用 SQL 表达式作数据源推数据了。下面是实现的步骤:
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值