0

我已经从 c# 动态创建了一个报告并成功完成,现在问题是它在右对齐,我希望将它放在中心。怎么做 ?

我的代码在这里:

 private void ShowReport()
 {
      ReportDataSource rds = new ReportDataSource("MyData", m_dataSet.Tables[0]);
      this.reportViewer1.LocalReport.DataSources.Add(rds);

      this.reportViewer1.RefreshReport();

      this.reportViewer1.LocalReport.LoadReportDefinition(m_rdl);
      reportViewer1.LocalReport.GetDefaultPageSettings().Margins.Right = 125; //Has no effect 
      this.reportViewer1.RefreshReport();   
 }

我也试过:

 public static Rdl.Report CreateReport(string groupBy)
        {
            Rdl.Report report = new Rdl.Report();
            try
            {
                report.Items = new object[] 
                {
                    CreateDataSources(), 
                    CreateHeader(groupBy),  
                    CreateBody(groupBy), 
                    CreateDataSets(), 
                    "9.5in", 
                    "1.5in",
                };
                report.ItemsElementName = new Rdl.ItemsChoiceType37[]
                { 
                    Rdl.ItemsChoiceType37.DataSources, 
                    Rdl.ItemsChoiceType37.PageHeader,
                    Rdl.ItemsChoiceType37.Body,
                    Rdl.ItemsChoiceType37.DataSets,
                    Rdl.ItemsChoiceType37.Width,
                    Rdl.ItemsChoiceType37.LeftMargin,

                };
            }
            catch (Exception ex) { }
            return report;
        }

请注意,我不必设置reportviewer 的对齐方式,我必须在reportviewer 上设置report 的对齐方式。

4

2 回答 2

1

无需计算文档和工作区大小,我发现 ReportViewer 的以下属性可以解决问题。

将此代码放在窗体的 Initialization 方法中。

ReportViewer1.SetDisplayMode(DisplayMode.PrintLayout);
ReportViewer1.ZoomMode = ZoomMode.PageWidth;

这将使文档居中对齐,并与表单的大小相匹配。

于 2020-08-03T21:33:15.770 回答
0

我不确定是否可以使用任何类型的 ReportViewer 控件属性。大多数情况下,我只是盯着它看,但如果精度是你的首要任务:我之前使用过一些代码就可以了。

如果你愿意,一个解决方法;

private void ReportViewer1_Resize(object sender, EventArgs e)
    {
        // Center report
        ReportPageSettings rps = ReportViewer1.LocalReport.GetDefaultPageSettings();
        if (ReportViewer1.ParentForm.Width > rps.PaperSize.Width)
        {
            int hPad = (ReportViewer1.ParentForm.Width - rps.PaperSize.Width) / 2;
            ReportViewer1.Padding = new Padding(hPad, 1, hPad, 1);
        }

编辑:顺便说一句,您基本上可以将代码与大多数方法一起使用。请让我知道这对你有没有用。

编辑#2:我也不确定您是在谈论表格,还是您想要居中的 ReportViewer 本身。希望它对你有用。

于 2016-05-17T13:24:48.390 回答