【问题标题】:Programmatically set margins in report viewer control以编程方式在报表查看器控件中设置边距
【发布时间】:2010-01-18 13:34:54
【问题描述】:

在我们的应用程序中,我们有一些报告需要非常具体的边距,这些边距取决于用户拥有的打印机。它用于打印到预先格式化的纸张上,并填充空白,并且根据打印机的不同,打印会出现一些边距。更糟糕的是,我们实际上并不控制使用的打印机,因为它不是内部应用程序。

我能想到的唯一解决方案是让用户以某种方式配置边距。我以为我可以像使用数据源和实际报告一样动态更改报告边距(我有一个控件用于显示我的应用程序中的每个报告,它工作正常),但我似乎找不到那个该死的属性这样做。报表查看器上有一个边距属性,但它是用于表单显示的,因此不会剪切它。

有谁知道怎么做。我想做的是在用户加载报告之前定义边距,即当他点击报告按钮时,我加载报告,设置边距(反之亦然)然后显示它。

在有人提及之前,我知道用户可以在加载报告后更改页面设置以满足他的需要,但这有两个缺点。第一个是它不是每次都保存的,我需要它是“可保存的”并由用户保存。第二个是报告查看器似乎有一些错误,当区域设置未设置为预期时,我们不能强制用户更改其设置以适应一个应用程序。

编辑:忘了说,它有任何用途。我的报告都是本地报告。

【问题讨论】:

  • 忘了说,我不在乎它是怎么做的,只要做到了……我不在乎我是否必须创建报告文件的副本并编辑如果这是唯一的方法,则“手动”文件...实际上这会起作用,但我宁愿找到更优雅的方法

标签: vb.net .net-2.0 reportviewer margins


【解决方案1】:
    'creates a new page setting
    Dim instance As New PageSettings()
    'create the new margin values (left,right,top,bottom)
    Dim value As New Margins(0, 0, 0, 0)
    'gives your new pagesetting a value
    instance.Margins = value

    'report viewer now sets your margins
    ReportViewer1.SetPageSettings(instance)

【讨论】:

    【解决方案2】:

    您不能直接执行此操作。尝试使用报表参数控制报表中的边距。

    【讨论】:

    • 不确定我是否理解您的意思?如果您的意思是在设计模式中,那么我真的不能这样做。如前所述,我需要能够让任何用户根据他的打印机进行更改。我知道这很麻烦,但我无法协商。相信我,我试图... :o
    • 在设计模式下,不要输入数值,而是使用引用报表参数的表达式。在呈现报表时,您可以让用户输入参数,或以其他方式提供参数。
    • 这本来很好,但它不起作用。我已经厌倦了它,当我输入绝对值以外的东西时(意味着我尝试做参数!MarginLeft.Value),它给了我一个错误。我尝试使用 CDbl(Parameters!MarginLeft.Value) 并得到相同的结果
    • 你是对的 - 边距不能是表达式。我想这只会让您有一个选择 - 在加载 RDLC 之前对其进行操作,就像您已经建议的那样。顺便说一句,在 gotreportviewer.com 上有一个这种技术的例子。
    【解决方案3】:

    嗯,我刚刚遇到了类似的问题;需要一个具有 0" 边距的报告,否则爆炸的东西从 2 页变为 6 页,并且它垂直拆分数据,因此页面没有意义。我不得不在打印设置中手动设置它才能打印,但是这份报告的最终目标是以 PDF 格式通过电子邮件发送给客户,你猜怎么着,当我手动设置边距并导出时,它仍然分成 6 页并被炸毁。所以冒着一切风险,我尝试了最后的最高努力来修复这该死的东西-我用写字板打开了.rdlc,奇迹的奇迹,找到了1in等。我将所有这些虫子设置为0in,保存,运行我的.net代码(2008),打开打印设置,哈利路亚,有我的 0in 设置。现在进行最高测试 - 我将其导出为 PDF,转到文件,然后是枪的儿子!甜蜜。有两个清晰干净完美布局的页面。宇宙中的一切都是有益的,我静下心来,任由绿叶流经我,只是沉浸在难得一见的片刻,有些人很少意识到——简单的修复。

    【讨论】:

    • 我意识到此解决方案不包括为不同用户动态更改报表边距。但是,它解决了我需要为给定报告设置自定义边距的问题。如上所述,我打开 .rdlc 文件进行编辑,发现以下几行: 1in1in1in1in 我编辑了这些并运行具有自定义边距设置的报告。
    【解决方案4】:

    查看ReportPageSettings class,它是报表查看器控件的一部分。设置这些值看起来应该可以满足您的需求。

    【讨论】:

    • 听起来不错,但我似乎找不到如何设置值(是在本地报表属性、报表查看器还是其他?)
    【解决方案5】:

    更多设置;

            Dim myPageSettings As New PageSettings()
            myPageSettings.Margins = New Margins(0, 0, 0 , 0)
            Dim paperSize As PaperSize = New PaperSize()
            'ToDo: update with the PaperKind 
            'that your printer uses
            paperSize.RawKind = PaperKind.A4
            ' paperSize.RawKind = System.Drawing.Printing.PaperKind.A4
            myPageSettings.PaperSize = paperSize
            'False for "Portrait"
            'True for "Landscape"
            myPageSettings.Landscape = False
    
            'report viewer now sets your margins
            ReportViewer1.SetPageSettings(myPageSettings)
    

    【讨论】:

    • 在哪里可以找到 PageSetting() 类?谢谢
    • 在哪里可以找到 PageSetting 类?谢谢
    【解决方案6】:

    此代码适用于我,以毫米为单位的数字

    Dim newPageSettings As New System.Drawing.Printing.PageSettings
    newPageSettings.Margins = New System.Drawing.Printing.Margins(50, 100, 45, 45)
    ReportViewer1.SetPageSettings(newPageSettings)
    

    我正在使用 vb.net 2013

    【讨论】:

      猜你喜欢
      • 2015-10-04
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 2011-01-29
      • 2019-10-19
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多