水晶报表Q&A

水晶报表Q&A


1、水晶报表下关于表格线隐藏的问题

Q:首先,建立Rpt文件,我是要做套打,所以在Rpt文件上画了些线,框还有文字,浏览的时候,通过更改Rpt字段值的办法,初步实现数据的读取,可是当我点打印的时候,问题就出来了,浏览的时候是有表格线、定位字符、线条的,可是我打印的时候想这些东西都别出来,因为,我拿到的纸张不是空白的,是已经固定格式的。
所以我在这里想问问各位:怎么样在浏览的时候是显示线线条条,打印的时候只打印出我从数据库读出来的内容,因为这个才我真正想打印出来的东西了

A:你做的时候把这些线和文本框抑制显示就行。以线框为例,右击BOX在弹出的菜单上选择FORMAT BOX在弹出的标签页上勾选中SURPRESS前面的复选框就行了,这样你在设计时能看到控件,帮你找位置,打印的时候,这些框线是不会打出来的

2、水晶报表能不能把头上的Logo换掉?

A:DisplayGroupTree="false" DisplayToolbar="False"

3、如何分组分页和按条目分页之间有冲突,当第一个组的数目够不上分页的时候,第二个组会接着第一个组的总数计算。

A:在组里用WhilePrintingRecords来清0

4、想在报表的右侧添加一列文字,要求垂直居中,该怎么设置呢?

Q:类似于这样:
发料单
料单号:××× 日期:××× //报表
——————————————————//
收料单位:××× 发料单位:×××//页眉 第
—————————————————— 一
器材名称|型号图号|单位|单价|数量 //页眉 联
———————————————— 通
电池 |********|节 |** | ** //详细资料 知
———————————————— ×
器材名称|型号图号|单位|单价|数量 //页眉 ×
———————————————— 存
警棍 |********|节 |** | ** //详细资料
————————————————

就是这样的报表,右面的“第一联通知××存”应该怎么加呢?

A:1,先向报表插入分组,并选中“在每页重复组页眉”那个选项;
2,然后在组页眉里靠右边上放入你要加的字段(字段待考虑);
3,格式化组页眉,选中“延续到后续节”那一项

这样就可以靠右显示一个你上面样式的字段

5、水晶报表A2纸型,查看器只显示一部分,怎么办好呢?

Q:我的报表很长,我安装了一个比较牛的打印机驱动,纸张大小可以上到A0,设计报表的时候没有问题,不论是用水晶报表设计器,还是用集成到.net环境里的设计器,全都正常。
可是在Asp.net页面上显示的时候,就只显示一部分。
但是我画的表格边框就可以显示完全。
就是说,在完整的表格边框中,只显示了一部分的数据出来,另外的一半空间,什么也没有。

有的时候,在另外一部分中还会显示几条线,是放在页脚里的线,可以显示完全。就是没数据。

切磋一下,看看怎么解决。

不要说调整页面查看器的属性,全试过了,不行。

A:objRpt.PrintOptions.PaperSize = PaperSize.PaperEsheet

PaperA3 A3 纸,297 x 420 毫米。
PaperA4 A4 纸,210 x 297 毫米。
PaperA4Small A4小纸,210 x 297 毫米。
PaperA5 A5 纸,148 x 210 毫米。
PaperB4 B4 纸,250 x 354毫米。
PaperB5 B5 纸,182 x 257 毫米。
PaperCsheet C 型纸,431.8 x 558.8 毫米

PaperDsheet,PaperEsheet 更大...

6、水晶报表中如何画斜线?

A:用一个BMP,白底,左上到右下一条黑斜线,放到报表里面,然后大小调整一下

7、水晶报表10在WEB下客户端能否不点击打印按钮和不弹出打印对话框而直接通过客户端安装的打印机打印?

Q:水晶报表10在WEB下客户端能否不点击打印按钮和不弹出打印对话框而直接通过客户端安装的打印机打印?
基本代码如下:
DB MyDB=new DB();
DataSet d=MyDB.GetRecByDataSet("select * from bobzhuvw_instrumentinput);
ReportDocument ReportDoc = new ReportDocument();
ReportDoc.Load(Server.MapPath("InstrumentInputPrintss.rpt"));
ReportDoc.SetDataSource(d);
//ReportDoc.PrintToPrinter(1,true,0,0);
CrystalReportViewer1.ReportSource = ReportDoc;

在水晶报表10中设置printmode 为activex后可以直接在客户端使用客户端的打印机直接打印,但是要使用crystalreportview这个控件,而且在打印时会弹出打印对话框,不知道哪位高手能解决这个问题:就是打印时不点击打印按钮、不弹出打印对话框而直接通过客户端安装的打印机打印!ReportDoc.PrintToPrinter(1,true,0,0);这个方法是直接打印到WEB服务器上的打印机的而不是客户端的打印机的所以不在考虑的范围之内!

A:
引用
Crystal Repoert属性 print Mode 默认是 PDF 设置为ActiveX
就可以直接打印了
DB MyDB=new DB();
DataSet d=MyDB.GetRecByDataSet("select * from bobzhuvw_instrumentinput);
ReportDocument ReportDoc = new ReportDocument();
ReportDoc.PrintOptions.PrinterName = "//ShareMachineName/SharePrintName"; //本地或网络打印机共享名
ReportDoc.Load(Server.MapPath("InstrumentInputPrintss.rpt"));
ReportDoc.SetDataSource(d);
ReportDoc.PrintToPrinter(1,true,0,0);
//CrystalReportViewer1.ReportSource = ReportDoc;

如此即可,你上面的代码就是少了设置打印机这一步。

Q:非常感谢楼上的回答!再请教楼上几个问题:
1)在开发时开发人员并不知道客户端用的打印机名称,所以是否可以通过程序代码来获得客户端的默认打印机信息?
2)“//ShareMachineName/SharePrintName”中的ShareMachineName是什么意思?请指教

A:客户端的打印机可以获取,但水晶报表的页面是随着打印机不同而变化的,如果客户端打印机和你设计时的不同,那就不能保证你设计的报表在客户端会正确打印;

ShareMachineName是指网络机器名,SharePrintName指网络打印机名,//ShareMachineName/SharePrintName这表示一个网络打印机

8、控制水晶报表每页显示的记录数

Q:想控制水晶报表每页显示的记录数,如果记录不多,则以表格的形式显示,我现在出现的问题是一页记录不多,则以空白空间显示

A:在详细资料上点格式化节,在后面页新建页打勾
公式中输入:
if onlastrecord then
formula = false
else
if RecordNumber mod 5 =0 then
formula =true
else
formula =false
end if
end if
'(BASIC 语法)
你把 if RecordNumber mod 5 = 0 then 该为 3 = 0
应该是3行换页,我试了下 1=0的情况下,一行就换页:)

如果你不想用basic用crystal语法
把formula去掉就可以了
if onlastrecord then
false
else
if RecordNumber mod 2 =0 then
true
else
false
就是用来控制换行的:)

9、我用.NET做了一个供货商查询页面,一个供货商对应多行数据,主页面是用DataGrid加Table做的,打印的时候调用水晶报表,想分页打印单个供应商的对应的信息,就是说要把所有的供应商的信息都打印出来,而一页显示一个供应商所对应的信息,有没有办法实现?是在Group by中加语句么?

做报表的时候按供应商分组.并且在分组位时新建页.

10、我在程序中手写了一个DataSet,怎么和水晶报表连接起来?我看了看网上的教程,上面说要用向导创建一个DataSet,然后在和水晶报表连接,可是我的DataSet包括有很多表,我该怎么办?

希望对你有帮助,我在asp.net上用的。

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Web

Public Class WFrmNotReigningInfo
Inherits System.Web.UI.Page
Dim oRptd As ReportDocument = New ReportDocument
Private Flag As String

#Region " Web 窗体设计器生成的代码 "

'该调用是 Web 窗体设计器所必需的。
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

End Sub
Protected WithEvents CrystalReportViewer1 As CrystalDecisions.Web.CrystalReportViewer

'注意: 以下占位符声明是 Web 窗体设计器所必需的。
'不要删除或移动它。
Private designerPlaceholderDeclaration As System.Object

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: 此方法调用是 Web 窗体设计器所必需的
'不要使用代码编辑器修改它。
InitializeComponent()
End Sub

#End Region

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'在此处放置初始化页的用户代码
'根据登陆信息取得当前操作类型
Flag = Session("ModuleType").ToString

Dim ds As New DsNotReigningInfo
Dim ds2 As New DsNotReigningInfo

Dim strCon As String

'自行填充数据集ds()
strCon = System.Configuration.ConfigurationSettings.AppSettings.Get("CMPSDBConnection")
Dim CN As New Data.OracleClient.OracleConnection(strCon)
'打开数据连接
CN.Open()

Dim da As New Data.OracleClient.OracleDataAdapter("SELECT a.LEAVE_ID,b.C_NAME as P_CODE,a.BEGIN_DATE,a.END_DATE,a.OP_DATE," & _
" c.C_NAME as OPERATOR,d.CLASS_NAME as CAUSATION,e.C_NAME as IMPOWER_P" & _
" FROM CM_T6016 a,(SELECT * FROM CM_T1002) b,(SELECT * FROM CM_T1002) c," & _
" (SELECT * FROM CM_T8001) d,(SELECT * FROM CM_T1002) e" & _
" WHERE (a.P_CODE=b.P_CODE) AND (a.OPERATOR=c.P_CODE) AND (a.CAUSATION=d.CLASS_CODE)" & _
" AND (a.IMPOWER_P=e.P_CODE) AND exists(SELECT * FROM CM_T1002 WHERE P_CODE=a.IMPOWER_P)" & _
" AND MODULE_FLAG='" & Flag & "'", CN)

da.Fill(ds, "CM_T6016")

Dim da2 As New Data.OracleClient.OracleDataAdapter("SELECT a.LEAVE_ID,b.C_NAME as P_CODE,a.BEGIN_DATE,a.END_DATE,a.OP_DATE," & _
" c.C_NAME as OPERATOR,d.CLASS_NAME as CAUSATION,a.IMPOWER_P" & _
" FROM CM_T6016 a,(SELECT * FROM CM_T1002) b,(SELECT * FROM CM_T1002) c,(SELECT * FROM CM_T8001) d" & _
" WHERE (a.P_CODE=b.P_CODE) AND (a.OPERATOR=c.P_CODE) AND (a.CAUSATION=d.CLASS_CODE)" & _
" AND not exists(SELECT * FROM CM_T1002 WHERE P_CODE=a.IMPOWER_P)" & _
" AND MODULE_FLAG='" & Flag & "'", CN)
da2.Fill(ds2, "CM_T6016")

ds.Merge(ds2)

oRptd.Load("D:/CMPS-CrystalReport/CMPSCrystalReport/Report/RptNotReigningInfo.rpt")
oRptd.Refresh()

oRptd.SetDataSource(ds)

CrystalReportViewer1.ReportSource = oRptd
End Sub

End Class

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值