使用水晶报表,希望能够根据用户选择的不同显示出不同的结果,采用的是拉模式。数据库直接连接视图,然后在页面中传递公式过去,进行过滤。做了个例子,如下:
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。使用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
解决方案 »
- 一个简单的问题
- 如何将数据放到客户端编辑后一次全部提交到服务器?
- asp.net(C#)页每次打开,显示不同信息,结合XML文档,如何实现,高手指点一下
- 请问用asp.net如何对服务器上的一个文件夹进行压缩
- 明天人生中第一次面试,散分求题
- 两个datagrid 一个数据源的问题
- 【200分】郁闷,做个网站还被封了,请大家看看什么原因
- 水晶报表打印空白页
- Entity Framework 执行SQL问题,ExecuteSqlCommand,in语法如何传参数呢?
- 出了什么问题?
- 页面部署两个file控件,上传图像的可以,上传rar文件没有反映~后台代码基本一致?原因是什么?
- 如何在asp.net里动态生成word页面并且直接显示在ie中?
,报表中使用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()
在CheckBox1.Checked选中的时候,
rptdoc.DataDefinition.RecordSelectionFormula = " {Orders_Qry.orderid}='10643'"
加载,但是数据还是显示不对,依然是原来那么多,为什么呢?
我直接在crystal report9中打开报表,使用公式,假如条件“{Orders_Qry.orderid}='10643'“,然后预揽数据,却能够起到作用。昏。。为什么呢?
是环境配置的问题还是代码的问题?在这种模式下有没有办法解决?
多谢各位了!!
这只是我做的一个例子,程序中有个小bug,
rptdoc.DataDefinition.RecordSelectionFormula = " {Orders_Qry.orderid}='10643'"
应该改为
rptdoc.DataDefinition.RecordSelectionFormula = " {Orders_Qry.orderid}=10643"
因为orderid是int类型。。
这样就可以运行了。
但是我实际中也是这样的问题??应该不可能的啊,晚上看了半天的。。明天去公司看看。。各位有什么好的建议,欢迎回复。。
高兴ing……
up