posts - 23,  comments - 27,  trackbacks - 0

从VS2005开始的时候就已经接触过RDLC报表,一直都在用ASP.NET的本地打印模式,当初就发现RDLC在做自定义报表的时候自动分页和打印纸张有点问题,不是自动分页分不正

确,就是自定义纸张不对,我没测试过WINFORM版本的是否存在过这样的问题,在WEB版上确实存在了这样的问题。

到了VS2008的时候,貌似也没有修正过这样的问题,也可能是我一直都在错误着用,反正我自定义纸张从来没有设置好 ,不得已只能使用相对稳定的水晶报表。

 自从VS2010发布后,我发现这个版本的VS打和编译速度都比VS2008上一个等级 ,再也没有VS2008添加工具的时候蜗牛般的感觉 ,非常舒畅。

然而,就这样  噩梦开始了 ,我的水晶报表升级到VS2010的版本后不能发布 ,查查才发现现在还没有提供 ……  ,不得已尝试一下RDLC  发现VS2010版本的RDLC已经非常不

错,做普通报表的时候给人的感觉是得心应手啊 ,见到VS2010不能使用水晶报表发布之后我开始尝试使用RDLC做我的自定义纸张打印套单 ,现在问题来了 我一一列出如下,

希望有遇见类似问题的给点建议:

 1、自动分页不准,我使用了Letter纸张横向  ,页脚有4CM  页眉有10CM  那么详细内容的行高0.66cm ,按正常走纸详细内容一共只有 6~7CM左右  但是 居然给我预览出33

行,33*0.66 天哪 页眉和页脚都不算高度? (打印机所有能设置的地方都已经设置好了的,绝对没有任何打印机设置方向/纸张问题)

 2、 鉴于第一点问题,我使用了sql的function,使用row_number()分页设置了组数,然后在RDLC的时候使用组强行分组,每10行分一组。

代码
USE [PRTest]
GO
/****** Object:  UserDefinedFunction [dbo].[FN_PRPrint]    Script Date: 10/22/2010 13:52:05 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
--
 Author:        <Author,,Name>
--
 Create date: <Create Date,,>
--
 Description:    <Description,,>
--
 =============================================
ALTER FUNCTION [dbo].[FN_PRPrint]
(    
    
@prno nvarchar(50)
)
RETURNS @CRE table
(    
     
     RID 
int IDENTITY(1,1NOT NULL
     ,RW 
INT
     ,CompanyNameEN 
nvarchar(200)
     ,DeptCode 
nvarchar(10)
     ,HKAgency 
nvarchar(50)
     ,PRDate 
datetime
     ,NPPNO 
nvarchar(50)
     ,Category 
nvarchar(50)
     ,PRNO 
nvarchar(100)
     ,ABCCODE 
nvarchar(10)
     ,LineDesc 
nvarchar(500)
     ,LineUse 
nvarchar(200)
     ,VendorCode 
nvarchar(50)
     ,LineQty 
decimal(18,2)
     ,LinePrice 
decimal(18,4)
     ,Amount 
decimal(18,2)
     ,CurrencyCode 
nvarchar(10)
     ,ReqDate 
datetime
     ,ReqPay 
datetime
     ,Remark 
nvarchar(500)
)
AS
BEGIN

INSERT INTO @CRE(RW, CompanyNameEN, DeptCode, HKAgency, PRDate, NPPNO, CATEGORY, PRNO, ABCCode, LineDesc, LineUse, VendorCode, LineQty, LinePrice,Amount, CurrencyCode, ReqDate, ReqPay, Remark)
SELECT RW=(row_number()Over(partition by prno Order By PRLine)-1)/10, A.CompanyNameEN,A.DeptCode,A.HKAgency,A.PRDate,A.NPPNO,A.CATEGORY,A.PRNO,A.ABCCode,A.LineDesc,A.LineUse,ISNULL(B.VenDescCN,a.VendorCode) AS VendorCode,A.LineQty,A.LinePrice,Amount=CAST(Isnull(A.LineQty,0)*ISNULL(A.LinePrice,0AS decimal(18,2)),A.CurrencyCode,A.ReqDate,A.ReqPay,A.Remark 
FROM (
    
SELECT  H.CompanyCode,H.HKAgency,CompanyNameEN=C.CompanyNameCN,H.NPPNO,H.CATEGORY, H.DeptCode, H.PRDate,H.PRNO, H.CurrencyCode,
        H.ABCCode, H.Remark, D.PRLine, D.LineDesc, D.LineUse, 
        D.MoldNO, D.PartNO, d.VendorCode, D.LineQty, D.LinePrice,
        D.ReqDate,D.ReqPay
    
FROM   PRHeader H
    
LEFT JOIN PRDetail D ON H.PRNO = D.PRNO 
    
INNER JOIN Company C ON C.CompanyCode=H.CompanyCode
    ) A
LEFT JOIN VENDOR B ON A.CompanyCode=B.CompanyCode And A.VendorCode=B.VenCode
WHERE PRNO=@PRNO

declare @sy int
declare @rw int
SELECT @sy=(10-max(rid)%10from @CRE
SELECT @rw=max(rw) from @CRE

INSERT INTO @CRE(RW, CompanyNameEN, DeptCode, HKAgency, PRDate, NPPNO, CATEGORY, PRNO, ABCCode, LineDesc, LineUse, VendorCode, LineQty, LinePrice,Amount, CurrencyCode, ReqDate, ReqPay, Remark)    
SELECT top (@sy@rw,null,null,null,null,null,null,null,null,null,null,null,null,null,0,null,null,null,null From PRHeader
    
RETURN 
END

 

 

 3、设置完分组后又发现一个新的问题,如果行数小于10行的数据,它的总计会紧贴详细内容,而并非我所想要的固定打在某个位置,所以我在function中判断如果行数小于

10的自动补全。

 4、结果出来了,能正常预览了 ,也能正常打印至PDF打印机了  但是  ,另外的一个噩梦又开始了 ,我的自定义纸张在我本机上打印没任何问题,在其它电脑上不管怎么设置都打印不

出正确的效果

 

RDLC,真的很难说爱你啊  

posted on 2010-10-22 14:15 Shannon 阅读(421) 评论(1) 编辑 收藏