[HTML]使用Pull模式
我们将通过下面的这些步骤来通过Pull模式来执行水晶报表 
1.首先创建rpt文件,并使用水晶报表设计接口设置一些必须的数据连接。 
2.拖放一个 CrystalReportViewer控件至aspx页面,设置它的属性指定我们上一步创建的.rpt文件。 
3. 在代码中调用DataBind方法。
创建 .rpt 文件:
1) 在右击”解决方案游览器“,在弹出的菜单中选择”添加“--”添加新项“-->”Crystal Report”  
 
2) 在”Crystal Report 库”中选择”作为空白报表“单选按钮,最后单击“确定“。  
 
3)这里将弹出水晶报表设计器。  
 
4) 右击报表中的”详细资料区”,选择“数据库”->“添加/删除数据库..."
5) 在弹出的”数据库专家“中,扩展”OLE DB(ADO)“选项,此时会弹出另外一个”OLE DB(ADO)“窗口。
6) 在 "OLE DB (ADO)" 弹出窗口中,选择 "Microsoft OLE DB Provider for SQL Server" 然后 "Next"
 
7) 指定连接的信息
服务器 : ASPCN (您的机器是什么名字就写什么) 
用户 ID: sa
密码:
数据库 : Pubs
8) 单击”Next“,最后单击”Finish“按钮。
9) 这时你就能在”数据库专家“窗口中看到我们选择的数据库。
10) 扩展”Pubs“数据库,扩展”表“,选择”Stores“表并将其加到”选定的表“区中,单击”OK"按钮。
   
11) 现在在”字段资源浏览器“中就会在左边”数据库字段“区中显示你选择的表,以及表中的字段。
12) 拖放需要的字段进入报表的”详细资料“区。字段名将会自动出现在”页眉“区。如果你想修改头部文字,则可以右击”页眉“区中的文字,选择”编辑文本对象“选项并进行编辑。
 
13) 保存,这样我们就有了一个水晶报表文件。
创建 CrystalReportViewer 控件
14) 回到前面的WebForm中,拖放一个Crystal Report Viewer控件到页面中去。
15) 调出Crystal Report Viewer控件的属性窗口,选择“DataBindings"区点击[...]
16) ”Crystal Report Viewer 数据绑定窗口”中,在右边的“可绑定属性”中选择”ReportSource“,并选择右下角的“自定义绑定表达式”中指定.rpt文件路径。    
17) 此时你能够从Crystal Report Viewer 控件中看到使用一些虚拟数据组成的报表文件的预览。
  注意:在上面的例子中,CrystalReportViewer可以在设计时直接调用真实的数据,因为此时数据已经保存。在这种情况下,设计时当没有保存数据时,他是不能显示数据的。取而代这的是显示一些虚拟的数据,只有在执行时才会选取真实的数据。
Code Behind 程序设计
18) 在Page_Load方法中调用DataBind方法。
执行你的程序 
19) 创建并运行你的程序!  
 
您现在就可以直接在Web页面中使用水晶报表内置的一些功能,如页面导航,缩放等。 
[/HTML] 

解决方案 »

  1.   

    创建公式并将其插入到报表中
    在“视图”菜单上单击“字段资源管理器”。 
     在“字段资源管理器”对话框中,选择“公式字段”,然后单击“新建”。 
    在“公式名称”对话框中,输入要标识该公式的名称。 
    单击“使用编辑器”。 
    公式工作室将出现,“公式编辑器”处于活动状态。在“公式编辑器”中,选择 Crystal 或 Basic 语法。 
    如果不确定要选择哪种语法则请参阅公式语法。在组件中键入或从组件树中选择它们以输入公式。 
    提示:    按下 Ctrl+Space 组合键将弹出一个可用函数列表。如果已经开始键入,将弹出一个关键字列表,其中包含可能与您刚键入的内容相匹配的关键字。 单击“检查”识别出公式中的任何错误。 
    修复“公式检查器”识别出的任何语法错误。 
     当公式具有正确语法时,单击公式工作室工具栏上的“关闭”。 
    出现提示时,单击“是”以保存公式。 
    在“字段资源管理器”对话框中选择该新公式,然后将其拖动到希望其在报表中出现的位置。 
    注意:    放置在报表中的公式在“设计”选项卡上以 @ 指示(例如,@ProcessTime)。
      

  2.   

    在“公式专家”中创建公式
    “公式专家”是公式工作室的一个组件。使用“公式专家”可创建和修改基于自定义函数的公式。注意:    若要了解“公式专家”的用户界面,请参阅公式专家。若要在“公式专家”中创建公式
    注意:    在开始此过程之前,请确保在报表中或在您具备访问权的 Crystal 储备库中具有自定义函数。在“报表”菜单上,单击“公式工作室”。 
    提示:     另一种途径是单击“专家工具”工具栏上的公式工作室按钮。 在“工作室树”中选择“公式字段”,然后单击“新建”。 
    在“公式名称”对话框中,输入要标识该公式的名称。 
    单击“使用专家”。 
    “公式专家”将出现 在“提供逻辑的自定义函数”区域,选择希望公式所基于的自定义函数。 
    您可选择“报表自定义函数”(存在于当前报表中的自定义函数)或“储备库自定义函数”(存储在储备库中的自定义函数)。注意:    如果选择某“储备库自定义函数”,则该自定义函数将添加到当前报表中。如果该自定义函数需要储备库中的其他自定义函数,则它们也将添加到报表中。在“函数参数”区域,在适当的“值”字段中为每个参数指定值。 
    您可直接输入常量值,或者可从关联列表中选择预定义的值或报表字段。单击“保存”将公式保存到公式工作室的“公式字段”文件夹中。 
    现在,您可在报表中使用此公式,就像使用在“公式编辑器”中创建的公式一样。
      

  3.   

    没用过水晶报表,是vs.net自带的吗?
      

  4.   

    在crystalReport(水晶报表)动态输入参数 
    命名空间为:using CrystalDecisions.Shared         private void BuildReportViewerParameters(CrystalDecisions.Web.CrystalReportViewer rptViewer, Hashtable ParamTable) 
            { 
                //定义报表视图的参数的方法 
                ParameterFields ParamFields = new ParameterFields(); 
                foreach (object key in ParamTable.Keys) 
                { 
                    ParameterField ParamField = new ParameterField(); 
                    ParameterValues ParamValues = new ParameterValues(); 
                    ParameterDiscreteValue ParamValue = new ParameterDiscreteValue(); 
                    ParamValue.Value = ParamTable[key].ToString(); 
                    ParamValues.Add(ParamValue); 
                    ParamField.ParameterFieldName = key.ToString(); 
                    ParamField.CurrentValues = ParamValues; 
                    ParamFields.Add(ParamField); 
                } 
                rptViewer.ParameterFieldInfo = ParamFields; 
            }         private void BuildReportClassParameters(CrystalDecisions.CrystalReports.Engine.ReportClass rpt, Hashtable ParamTable) 
            { 
                //定义报表类的参数的方法 
                foreach (object key in ParamTable.Keys) 
                { 
                    ParameterValues ParamValues = new ParameterValues(); 
                    ParameterDiscreteValue ParamValue = new ParameterDiscreteValue(); 
                    ParamValue.Value = ParamTable[key].ToString(); 
                    ParamValues.Add(ParamValue); 
                    rpt.DataDefinition.ParameterFields[key.ToString()].ApplyCurrentValues(ParamValues); 
                } 
            } 
             
            protected void BuildReportParameters(CrystalDecisions.Web.CrystalReportViewer rpt,Hashtable ParamTable) 
            { 
                //定义报表参数的方法 
                ParameterFields ParamFields = new ParameterFields();             foreach(object key in ParamTable.Keys) 
                { 
                    ParameterField ParamField; 
                    ParameterValues ParamValues; 
                    ParameterDiscreteValue ParamValue;                 ParamField = new ParameterField(); 
                    ParamValues = new ParameterValues(); 
                    ParamValue = new ParameterDiscreteValue();                 ParamValue.Value = (string)ParamTable[key];  
                    ParamValues.Add(ParamValue); 
                    ParamField.ParameterFieldName=(string)key; 
                    ParamField.CurrentValues = ParamValues; 
                    ParamFields.Add(ParamField); 
                } 
                rpt.ParameterFieldInfo = ParamFields; 
            }   
    然后再你的需要调用参数的地方,加如下引用: private void Button_output_Click(object sender, System.EventArgs e) 
            { 
                CrystalDecisions.Shared.TableLogOnInfo logInfo = new CrystalDecisions.Shared.TableLogOnInfo();  //设置报表的登录信息 
                logInfo.ConnectionInfo.ServerName = "ANGEL";  //设置报表与库的连接信息 
                logInfo.ConnectionInfo.DatabaseName = "KaoQin"; 
                logInfo.TableName = "Emstatistic"; 
                logInfo.ConnectionInfo.UserID = "sa"; 
                logInfo.ConnectionInfo.Password = ""; 
                CrystalReportViewer1.ReportSource = Server.MapPath("cr_aa.rpt"); //指定报表的数据源 
                CrystalReportViewer1.LogOnInfo.Add(logInfo);//对参数进行赋什值  
        //        CrystalReportViewer1.DataBind();             //声明变量并获取导出选项 
                cr_aa myReport = new cr_aa();  //定义一个名为myReport的报表 
                myReport.Database.Tables[0].ApplyLogOnInfo(logInfo);   
                CrystalReportViewer1.ReportSource = myReport; 
                CrystalReportViewer1.DataBind();                Hashtable t = new Hashtable();     
                t.Add("p_st_month", Textmonth.Text);  //为参数赋值 
                BuildReportParameters(CrystalReportViewer1, t);  //调用建立报表参数的方法   
                BuildReportViewerParameters(CrystalReportViewer1, t);   //给报表浏览器添加参数  
                BuildReportClassParameters(myReport, t);  //给报表类添加参数                CrystalDecisions.Shared.DiskFileDestinationOptions diskOpts = new CrystalDecisions.Shared.DiskFileDestinationOptions(); 
                //设置导出格式 
                myReport.ExportOptions.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile; 
                myReport.ExportOptions.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.Excel; 
                //设置磁盘文件选项 
                diskOpts.DiskFileName = "C:\\Documents and Settings\\Administrator\\My Documents\\kaoqin_rpt.xls";    
                myReport.ExportOptions.DestinationOptions = diskOpts;  
                myReport.Export(); 
                Response.Write("<script language='javascript'>alert('您已经将报表成功输出到Excel文件'); window.location.href='customRpt.aspx';</" + "script>"); 
            }
      

  5.   

    .NET环境下水晶报表使用总结水晶报表是一个优秀的报表开发工具,本人在开发通用管理系统的时候,所有报表都使用水晶报表,其简单、易用和强大的功能令笔者倍加喜爱,现将水晶报表使用手记呈现给大家。   一、在使用自带的水晶报表时,请注册,否则只能使用30次  水晶报表注册码
      注册号:6707437608
      密码:AAP5GKS0000GDE100DS   二、使用CrystalReportViewer进行预览  CrystalReportViewer控件允许在应用程序中查看 Crystal Report。ReportSource 属性用于设置要查看哪个报表。该属性设置之后,报表显示在查看器中。报表源可以是ReportDocument、报表文件的路径,也可以是强类型报表。  1. 打开“工具箱”,并将一个 CrystalReportViewer 拖到窗体上,我们命名为rptVew。   2. 通过拖放操作将 Windows 窗体查看器调整到希望的大小并将其移动到所需位置。   3. 当运行应用程序时,报表将显示在查看器中。  三、创建新报表  1. 指向“添加”,单击“添加新项”。   2. 在“添加新项”对话框中,从“模板”区域选择 Crystal Report,将报表命名为rptClient,单击“打开”。   3. 在 Crystal Report 库中,选择下列选项之一:    · 使用报表专家 — 指导您完成报表的创建过程,并将您的选择添加到 Crystal Report Designer。    · 作为空白报表 — 打开 Crystal Report Designer。    · 来自于现有的报表 — 创建新报表,它与指定的另一报表设计相同。   注意 Crystal Report 库包含许多专家,可以指导您完成数个特定类型报表的创建工作。您可能希望使用专家来创建最初的报表,以确定哪种报表构造方法适合您的需要。  4. 单击“确定”按钮。   如果选择使用“报表专家”,便会出现“报表专家”对话框,并带有数据资源管理器。为每个文件夹选择所需数据,完成“报表专家”选项卡界面上的操作,然后单击“完成”来访问 Crystal Report Designer 和您的报表  四、是否需要动态设置数据源?  Crystal Reports 通过数据库驱动程序与数据库连接。每个驱动程序都被编写为可处理特定数据库类型或数据库访问技术。   拉和推模型  为了向开发人员提供最灵活的数据访问方法,Crystal Reports 数据库驱动程序被设计为可同时提供数据访问的拉模型和推模型。   拉模型  在拉模型中,驱动程序将连接到数据库并根据需要将数据“拉”进来。使用这种模型时,与数据库的连接和为了获取数据而执行的 SQL 命令都同时由 Crystal Reports 本身处理,不需要开发人员编写代码。如果在运行时无须编写任何特殊代码,则使用拉模型。  推模型  相反,推模型需要开发人员编写代码以连接到数据库,执行 SQL 命令以创建与报表中的字段匹配的记录集或数据集,并且将该对象传递给报表。该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。  四、从 ADO.NET 数据集制作报表  从数据库创建数据集对象   1. 在项目中新建一个架构文件:    a. 在解决方案资源管理器中,右击项目名,指向“添加”,然后单击“添加新项”。    b. 在“添加新项”对话框的“类别”区域,展开文件夹,然后选择“数据”。    c. 在“模板”区域选择“数据集”。    d. 接受默认名称 Dataset1.xsd。   这就创建了一个新的架构文件 (Dataset1.xsd),以后将用它来生成强类型数据集。该架构文件将显示在 ADO.NET 数据集设计器中。   2. 指定数据库位置:    a. 在服务器资源管理器中,右击“数据连接”并选择“添加连接”。    b. 在“数据链接属性”对话框中,单击“提供程序”选项卡,然后选择一个提供程序(例如 Microsoft OLE DB Provider for SQL Server)。    c. 单击“连接”选项卡,然后指定您的数据库所在位置。在所需位置输入服务器和登录信息。    d. 单击“确定”按钮。    此时,您的数据库及其表和字段就出现在服务器资源管理器的“数据连接”节点下面。   3. 在解决方案资源管理器中,双击 Dataset1.xsd (如果它尚不是活动视图)。    Dataset1.xsd 现在应显示在“数据集”选项卡中。   4. 若要为数据集建立架构,请将需要的表从服务器资源管理器中拖动到 Dataset1.xsd 的“数据集”选项卡上。   5. 单击“保存 Dataset1.xsd”来保存“Dataset1.xsd”文件。   6. 在“生成”菜单上,单击“生成”为项目生成数据集对象。   ADO.NET 数据集对象提供数据的描述,从它可以向 Crystal report 添加表。使用 Crystal Report Designer 中的“数据库专家”从 ADO.NET 数据集对象添加表。   请在使用“报表专家”创建新报表时调用“数据库专家”。或者,要从一个已经使用 ADO.NET 建立好的报表中访问“数据库专家”,请在 Report Designer 中右击,指向“数据库”,然后单击“添加/删除数据库”。  将报表连接到 ADO.NET 数据集对象   1. 在“数据库专家”中,展开“项目数据”文件夹。   2. 展开“ADO.NET 数据集”文件夹。   3. 选择所需数据集对象。   例如,如果当时使用的是从项目“WindowsApplication1”的架构文件“Dataset1.xsd”中生成的数据集对象,则应该选择“WindowsApplication1.Dataset1”。   4. 选择要向报表中添加的表,和使用其他数据源一样。   五、动态改变数据源的代码 Dim dsdataSet As New DataSet()Dim oRpt As New rptClient() '已建立的报表rptClient  请读者自行填充数据集dsdataSet 
    '使用“报表引擎”对象模型将填充的数据集,传递给报表oRpt.SetDataSource(dsdataSet.Tables(0))' 将带有数据的报表对象绑定到 Windows 窗体查看器,rptVew(CrystalReportViewer控件)rptVew.ReportSource = oRpt  注意 FillDataSet 方法可连接到指定的数据库,提取数据,然后断开数据库连接。如果您希望将数据库中的多个表添加到报表中,请使用 SQL JOIN 语句将这些表联接在一起;然后在 FillDataSet 方法中指定一个结果表  六、创建主从报表  在报表中,有许多报表是主从表结构,比如订单与订单商品明细,订单是一个表中的一条记录,而分录是另一个表中的多条记录,两个表通过一个字段关联起来,这种报表可利用其分组功能实现,  1. 新建一个工程  2. 往FORM1中添加一个CrystalReportViewer控件  3. 在服务噐资源管理器中连接到SQL SERVER 2000上的Northwind数据库  4. 添加一个数据集Dataset1,将服务器资源管理器中的Orders和 Order Details加入到数据集中。  5. 添加一个水晶报表,使用报表专家,在项目数据中选择“ADO.NET数据集”,插入表Orders和 Order Details,“链接”中是关联字段的链接,在“字段”中选择要显示的主表和明细表的字段,组中选择分组依据为Orders表OrdersID字段,总计,图表,选择(可进行筛选),样式(可设置报表标题),可自行设置。设置完后,点击完成。  6. 在报表设计器中调整需要显示的字段的位置、宽度等。  7. 在窗口中添加代码。Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadDim oRpt As New CrystalReport1()Dim dsdataSet As New Dataset1() Dim CN As New Data.SqlClient.SqlConnection("data source=PMSERVER;initial catalog=Northwind;user id=sa;password=sa")CN.Open()Dim daOrders As New Data.SqlClient.SqlDataAdapter("select * from orders", CN)daOrders.Fill(dsdataSet, "orders") Dim daDetails As New Data.SqlClient.SqlDataAdapter("select * from [Order Details]", CN)daDetails.Fill(dsdataSet, "Order Details") '使用“报表引擎”对象模型将填充的数据集,传递给报表oRpt.SetDataSource(dsdataSet)CrystalReportViewer1.ReportSource = oRptEnd Sub  8、运行程序  七、用程序改变报表中text的文本  代码如下:Dim GetTextObject As TextObject' 按名称获取 ReportObject,将其转换为 TextObject,并返回此对象。GetTextObject = orpt.ReportDefinition.ReportObjects.Item("text13")GetTextObject.Text = "XXXX系统"  总结:水晶报表具有非常强大的功能,还可进行导出WORD、EXCEL、RTF等文件,还可生成复杂、漂亮图表,是进行WEB和WINDOWS报表开发的利器。
      

  6.   

    官方水晶报表 .NET 应用程序实例下载 (C#、Visual C++.NET)http://www.kehui.net/index.php?op=article&file=read&aid=21007
      

  7.   

    using CrystalDecisions.Shared;
    我用了怎么不行:
    出错信息:
    H:\Crystal\Form1.cs(7): 找不到类型或命名空间名称“CrystalDecisions”(是否缺少 using 指令或程序集引用?)