Asp.Net C#中使用水晶报表详解分析

作者:袖梨 2022-06-25
1) 从webform工具栏中拖动水晶报表查看器控件(crystal report viewer)至.asp教程x页面中。 
  2) 调出水晶报表查看器控件的属性窗口  
  3) 点击[...]按钮查看"data binding"属性,并弹出了databinding窗口。
  4) 从左边的"bindable属性”区中选择“report source”
  5) 选中"自定义绑定表达式"单选按钮,在右边的底部的窗口中指定.rpt文件的文件名和路径,例如:"c:program filesmicrosoft visual studio.netcrystal reportssamplesreportsgeneral businessworld sales report.rpt",然后”确定“
  注意:文件”world sales report.rpt“文件是在vs.net安装时创建的。如果你在安装过程中指定了其它目录,此时你最好确认一下路径的正确性。
  上面的步骤中实际上是插入了下面这些代码至asp.net教程文件中:
<%@ register tagprefix="cr" namespace="crystaldecisions.web" assembly="crystaldecisions.web" %>

以及:

<cr:crystalreportviewer>
id="crystalreportviewer1"
runat="server"
reportsource='' <%# "c:program filesmicrosoft visual studio.netcrystal reportssamplesreportsgeneral businessworld sales report.rpt" %>''>
</cr:crystalreportviewer>
注意:在飞刀我的vs.net正式版中自动生成的代码中reportsource产生的样式不是这样子的,它是:
reportsource=" <%# c:xxxxxxxx.rpt %>"
  这样是错误的,会出现错误信息,有两处错误:
databind中要有双引号,因此外部只能用单引号
目录分隔符号不能使用"",必须使用""
  必须按照使用本文介绍的格式来手动修改,这也算是vs.net的一个bug吧。
  6) 在page_load方法中调用databind方法。(代码为vb.net)
private sub page_load(byval sender as system.object, byval e as system.eventargs)

databind()

end sub
7)保存并编译你的页面。 现在,你就有一个内嵌水晶报表的webform页面了。
  注意:实际开发中,一开始会出现无法访问inetsrv目录的错误,解决的办法是改变其目录的安全属性,使user用户有可写的权限。飞刀我发现.net系统自已给出的解决方法是没有用的,也可能是我使用的是windows.net操作系统的原因。
使用push模式
  我们采用下面的几步使用push模式执行水晶报表:
  1. 设计一个dataset
  2. 创建一个.rpt文件同时将其指定给上一步建立的dataset。
  3. 在aspx页面中拖放一个crystalreportviewer控件同时将其与前面的rpt文件建立联系。
  4. 在代码中访问数据库教程并把数据存入dataset
  5. 调用databind方法。
  设计一个dataset
  1) 右击“解决方案浏览器”,选择“添加”--“添加新项”-->“数据集”

  2) 从“服务器资源管理器”中的“sql server”中拖放“stores”表(位于pubs数据库中)。
  3) 此时在数据集中就会有一个stores表的结构图。
  - .xsd文件中仅仅包含一个结构图,但是不会有任何数据在里面。
  创建 .rpt 文件 :
  4) 使用上面的介绍过的方法创建此文件,唯一的不同就是使用数据集来代替前面的直接连接数据。
  5)建立.rpt文件之后,右击“详细资料”-->"添加/删除数据库“
  6) 在”数据库专家“窗口中,展开”项目数据“(代替以前的oledb),展开“ado.net数据集”--"dataset1“,选择”stores“表。
  7) 将”stores"表添加到“选定的表”中,点击“ok”
  8) 使用pull模式下的方法,建立一个webform
  建立一个crystal report viewer 控件
  9) 建立一个crystal report viewer 控件,并设定其属性,此处与pull模式下是一致的。
  code behind 代码:
  10) 在page_load方法中使用下面的子函数:
vb.net代码:
 sub bindreport()

    dim myconnection as new sqlclient.sqlconnection()

    myconnection.connectionstring= "server= (local)netsdk;database=pubs;trusted_connection=yes"

    dim mycommand as new sqlclient.sqlcommand()

    mycommand.connection = myconnection

    mycommand.commandtext = "select * from stores"

    mycommand.commandtype = commandtype.text

    dim myda as new sqlclient.sqldataadapter()

    myda.selectcommand = mycommand

    dim myds as new dataset1()
''这就是我们在设计模式上使用的dataset
    myda.fill(myds, "stores")
    ''你不得不使用与你前面dataset相同名字。
    dim orpt as new crystalreport1()
    '' 水晶报表绑定
    orpt.setdatasource(myds)
    '' 设定水晶报表的reportsource
    crystalreportviewer1.reportsource = orpt
  end sub
c#代码:
private void bindreport()

{

  string strprovider = "server=(local);database=pubs;uid=sa;pwd=";

  crystalreport1 ocr = new crystalreport1();

  dataset1 ds = new dataset1();

  sqlconnection myconn = new sqlconnection(strprovider);

  myconn.open();

  string strsel = "select * from stores";

  sqldataadapter myadapter = new sqldataadapter(strsel,myconn);

  myadapter.fill(ds,"stores");

  ocr.setdatasource(ds);

  this.crystalreportviewer1.reportsource = ocr;

}
注意:在上面的代码中,你得注意一下orpt是"strongly typed"的报表文件。如果你需要使用"untyped"报表,你得使用reportdocument对象,然后再调用报表文件。
  运行你的程序。
  11) 运行你的程序
  将报表文件导出成为其它格式
  你能够将报表文件导出成为下列格式:
      1. pdf (portable document format)
      2. doc (ms word document)
      3. xls (ms excel spreadsheet)
      4. html (hyper text markup language – 3.2 or 4.0 compliant)
      5. rtf (rich text format)
  使用pull模式导出报表
  当导出使用pull模式创建的文件时,水晶报表准确地打开所需要的数据,下面是执行导出功能的代码:
c#代码:
vb.net代码:
private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click

  dim myreport as crystalreport1 = new crystalreport1()

  ''注意:这里我们建立一个strong-typed的水晶报表实例。

    dim diskopts as crystaldecisions.shared.diskfiledestinationoptions = new crystaldecisions.shared.diskfiledestinationoptions()

    myreport.exportoptions.exportdestinationtype = crystaldecisions.[shared].exportdestinationtype.diskfile

  '' 导出成为其它文件时也需要这个选项

  '' 如microsoft exchange, mapi等.

    myreport.exportoptions.exportformattype = crystaldecisions. [shared].exportformattype.portabledocformat

  ''这里我们导出成为.pdf格式文件,你也能选择上面的其它类型文件

    diskopts.diskfilename = "c:output.pdf"

  ''如果你不指定确切的目录,那么文件就会保存到[windows]system32目录中去了

    myreport.exportoptions.destinationoptions = diskopts

  ''水晶报表文件不包含直接的filename属性,因此你不能直接指定保存的文件名

  ''所以你不得不使用diskfiledestinationoptions对象,设置它的diskfilename属性

  ''为你想要的路径,最后将水晶报表的destinationsoptions属性指定为上面的diskfiledestinationoption

    myreport.export()

  ''上面的代码将完成导出工作。

end sub
使用push模式导出水晶报表
  当导出的报表是由push模式建立的时,第一步就是通过编程建立连接并组装dataset,设置报表的的setdatasource属性。再下面的步骤就有pull模式一样的了。
使用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页面中使用水晶报表内置的一些功能,如页面导航,缩放等。

  我们将通过下面的这些步骤来通过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) 创建并运行你的程序!  

相关文章

精彩推荐