使用水晶报表,希望能够根据用户选择的不同显示出不同的结果,采用的是拉模式。数据库直接连接视图,然后在页面中传递公式过去,进行过滤。做了个例子,如下:
1。使用ms sql Northwind数据库
2。建立自己的视图 Orders_Qry
create   view "Orders_Qry" AS
SELECT top 50 Orders.OrderID, Orders.CustomerID, Orders.EmployeeID, Orders.OrderDate, Orders.RequiredDate, 
Orders.ShippedDate, Orders.ShipVia, Orders.Freight, Orders.ShipName, Orders.ShipAddress, Orders.ShipCity, 
Orders.ShipRegion, Orders.ShipPostalCode, Orders.ShipCountry, 
Customers.CompanyName, Customers.Address, Customers.City, Customers.Region, Customers.PostalCode, Customers.Country
FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID
GO

解决方案 »

  1.   

    3。在当前项目下面建立一个文件夹report,增加新报表,文件名默认为crystalReport1.rpt 
       ,报表中使用OLE DB直接连接到数据库中,将视图Orders_Qry作为选定的表添加到报表  中,随便添加几个字段到报表中。
    4。在web页面的page_load事件中加入如下代码:
    Imports CrystalDecisions.CrystalReports.Engine
    Imports CrystalDecisions.Shared
    Imports System.Drawing.Printing
    Imports System.Environment
    ........
    ........
            Dim rptdoc As New ReportDocument
            Dim FormulaStr As String
            Dim dd As New TableLogOnInfo        rptdoc.Load(Server.MapPath("..\test_1\report\CrystalReport1.rpt"))
            With dd.ConnectionInfo
                .ServerName = "127.0.0.1"
                .DatabaseName = "Northwind"
                .UserID = "sa"
                .Password = ""
            End With
            Dim i As Integer
            For i = 0 To rptdoc.Database.Tables.Count - 1
                rptdoc.Database.Tables(i).ApplyLogOnInfo(dd)
                rptdoc.Database.Tables(i).Location = rptdoc.Database.Tables(i).Location
            Next        If CheckBox1.Checked = True Then
                rptdoc.DataDefinition.RecordSelectionFormula = " {Orders_Qry.orderid}='10643'"
            End If        Dim crEO1 As ExportOptions
            Dim DiskOption1 As New DiskFileDestinationOptions
            Dim Name As String        Name = GetEnvironmentVariable("TEMP") & "\" & Session.SessionID.ToString & ".pdf"
            DiskOption1.DiskFileName = Name
            crEO1 = rptdoc.ExportOptions        With crEO1
                .DestinationOptions = DiskOption1
                .ExportDestinationType = ExportDestinationType.DiskFile
                .ExportFormatType = ExportFormatType.PortableDocFormat
            End With
            rptdoc.Export()        Response.ClearContent()
            Response.ClearHeaders()
            Response.ContentType = "application/pdf"
            Response.AddHeader("Content-Disposition", "inline; filename=Report1.pdf")
            Response.WriteFile(Name)
            Response.Flush()
            Response.Close()
      

  2.   

    问:
    在CheckBox1.Checked选中的时候,
    rptdoc.DataDefinition.RecordSelectionFormula = " {Orders_Qry.orderid}='10643'"
    加载,但是数据还是显示不对,依然是原来那么多,为什么呢?
    我直接在crystal report9中打开报表,使用公式,假如条件“{Orders_Qry.orderid}='10643'“,然后预揽数据,却能够起到作用。昏。。为什么呢?
    是环境配置的问题还是代码的问题?在这种模式下有没有办法解决?
    多谢各位了!!
      

  3.   

    问题刚问完,就发现哪里错了
    这只是我做的一个例子,程序中有个小bug,
    rptdoc.DataDefinition.RecordSelectionFormula = " {Orders_Qry.orderid}='10643'"
    应该改为
    rptdoc.DataDefinition.RecordSelectionFormula = " {Orders_Qry.orderid}=10643"
    因为orderid是int类型。。
    这样就可以运行了。
    但是我实际中也是这样的问题??应该不可能的啊,晚上看了半天的。。明天去公司看看。。各位有什么好的建议,欢迎回复。。
      

  4.   

    还没仔细看楼主什么意思,就发现楼主说问题解决了。
    高兴ing……
    up
      

  5.   

    http://www.cnblogs.com/fecitsky/articles/35859.aspx