找回密码
 立即注册

QQ登录

只需一步,快速开始

yin_tb

高级会员

53

主题

200

帖子

1047

积分

高级会员

积分
1047

微信认证勋章

yin_tb
高级会员   /  发表于:2019-5-16 15:28  /   查看:7025  /  回复:17
在我开发的工资管理系统中,其中有个工资发放签名表,用的组件是truedbgrid, 我的预览代码如下所示:
With tgrid1.PrintInfo
            Dim fntFont As Font
            fntFont = New Font(.PageHeaderStyle.Font.Name, .PageHeaderStyle.Font.Size, FontStyle.Bold)
            .PageHeaderStyle.Font = fntFont
            .PageHeader = cmb_year.Text & " 年 " & cmb_month.Text & " 月工资数据表"
            .ShowSelection = True  '不显示选中标志
            .UseGridColors = True
             .PageSettings.Landscape = True '横向打印
            .PageSettings.Margins.Top = 10   '上边距
            .PageSettings.Margins.Left = 10
            .PageSettings.Margins.Bottom = 10
            .PageSettings.Margins.Right = 10
            .PageSettings.Color = False
            .PageHeaderStyle.HorizontalAlignment = AlignHorzEnum.Center  '表头居中
            .RepeatColumnHeaders = True
            .PageBreak = PrintInfo.PageBreaksEnum.ClipInArea   '控制是否压缩到一页
            .PageFooter = "页: \p"
            .PrintPreview()
        End With
问题:基于以上代码,发现,预览的效果,各列的宽度及列标题换行并不是truedbgrid当前界面的效果,列很多,系统分了多页,但发现,就算在预览界面设置为A3横向的纸型,效果也并不一致,请问是什么原因呢?如附上的图片,1是查询效果,2是预览A4的效果(系统自动分页了,但第二页中,列宽更不正常了),3是预览中A3的效果。
可以看到,本月扣零,扣款合计,实发合计等,预览里和查询里根本不一样。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

17 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-5-16 17:40:44
沙发
这个打印预览其实和excel预览时类似,并不会按照固定的宽度来,而是会按照纸张的大小来缩放,如果确实纸张太窄的时候回选择分割列在多个页面上来显示宽度
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2019-5-16 17:58:17
板凳
那我想所见即所得,你有能帮到我的思路吗?
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-5-16 18:19:49
地板
我看你也在看C1Report,这个应该比较适合你这种情况,可以实现所见即所得的表格或者报表效果
可以参考
ComponentOne Samples\WinForms\C1Report\Cs\FlexGridReport

回复 使用道具 举报
yin_tb
高级会员   /  发表于:2019-5-16 18:45:36
5#
嗯,我看看,开始以为C1report已经停止研发升级,要向c1Flexreport迁移,所以没研究它。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-5-17 09:22:50
6#
嗯,如果要实现你的这些需求,两个应该都是可以的
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2019-5-17 16:15:31
7#
Richard.Ma 发表于 2019-5-16 18:19
我看你也在看C1Report,这个应该比较适合你这种情况,可以实现所见即所得的表格或者报表效果
可以参考
Co ...

你说的这个示例我看了,也测试了,但并不理想,不对。其实我的代码中,动态添加报表列,用的是一样的方法,虽然示例中是用的一个rectangle,在添加时用了一句,例如 sHdr.fields.add("fh"+col.name,col.name,rc);
而我用的方法是分开的,但是原理是一样的,我用的是:
textfld1=new textfield()
textfld1.name="xxx"
textfld1.text="xxxx'
textfld1.left=XXX      //左
textfld1.width=col.width*15  //宽
在你说的示例中,定义rectangle的宽度,即rc.width=col.width * 1440 /96 +200
这个地方他为何要再加200我不明白,但1440/96=15,即是我说的1像素=15缇,1pixels=15twips.
不管我是否去掉示例中的+200,预览的效果,都不是和flexgrid的效果一样的,你可以拖动flexgrid的列宽,变窄或宽,即使把设置字体的代码注释掉,然后预览测试下,你会发现,预览中的各列宽同flexgrid并不一致,相当不一致。
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2019-5-17 16:24:51
8#
我又确认了下单位,  flexgrid和truedbgrid的列宽,col.width的单位确实是pixels,而flexreport或c1report中的单位是twips.换算关系也没问题,但为何就是不对呢?换算关系如下:
缇(Twips) (缇:计量单位,等于“磅”的 1/20,英寸的 1/1,440。一厘米有 567 缇。
像素(Pixels):监视器或打印机分辨率的最小单位
右键单击桌面,选择属性,选择“设置”选卡,单击高级按钮。
里面出现DPI设置。一般为“正常尺寸(96 DPI)”。
DPI的意思就是 DPI (Dots per Inch)。因此我们可以得到如下换算公式
1 Pixel = 1440 TPI / 96 DPI = 15 Twips
1 Twip = 96 DPI / 1440 TPI = 0.0666667 Pixels
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2019-5-17 16:31:09
9#
本帖最后由 yin_tb 于 2019-5-17 16:34 编辑

经过你的示例ComponentOne Samples\WinForms\C1Report\Cs\FlexGridReport的引导,我发现,这个问题变成和我那个问题c1flexreport成同一个问题了,那个问题,我就不用做demo了.你的意思我明白,想实现truedbgrid的所见即所得,是不可能的了,只能是把数据加载到c1flexreport中,而我那个《关于flexreport的问题》中,第一个问题就是这个问题。
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2019-5-17 18:21:13
10#
本帖最后由 Richard.Ma 于 2019-5-17 18:23 编辑


嗯,这个问题我再帮你用C1report或者FlexReport看一下能否保持一致,方便的话你可以把你这个表格的设计代码发上来,这样我这边测试时也有针对性。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部