快速报告:如何打印一组值?

问题描述 投票:0回答:1

我尝试从代码创建 Report.pdf + 使用 Fast Report Designer(2023/24 版)。

因此,我创建了包含 2 个表的 DataSet - Contact 和 Country 。 并将其注册到FastReport中。

在设计器中,我使用绑定(没有任何 Windows 数据集,使用代码中的所有数据集) - 我可以看到 只有一排。 但不是一组行(表)。

我尝试了一些方法,并且在更好的结果中可以看到一组行 - 但每行打印在不同的页面上。

所以,我不知道该怎么办。

我的代码(C#、.net 8):

  var dataContainer = new DataContainer()
        {
            Data = new Dictionary<string, List<Dictionary<string, object>>>()
            {
                {
                    "Contact", new List<Dictionary<string, object>>()
                    {
                        new Dictionary<string, object>()
                        {
                            {"Name", "John Doe"},
                            {"Email", "[email protected]"},
                            {"Phone", "123-456-7890"}
                        },
                        new Dictionary<string, object>()
                        {
                            {"Name", "Jane Smith"},
                            {"Email", "[email protected]"},
                            {"Phone", "098-765-4321"}
                        }
                    }
                },
                {
                    "Country", new List<Dictionary<string, object>>()
                    {
                        new Dictionary<string, object>()
                        {
                            {"Name", "United States"},
                            {"Code", "US"},
                            {"Population", 331000000}
                        },
                        new Dictionary<string, object>()
                        {
                            {"Name", "Canada"},
                            {"Code", "CA"},
                            {"Population", 37700000}
                        }
                    }
                }
            }
        };

       
        DataSet dataSet = new DataSet("JSON");

    
        DataTable contactTable = new DataTable("Contact");
        contactTable.Columns.Add("Name", typeof(string));
        contactTable.Columns.Add("Email", typeof(string));
        contactTable.Columns.Add("Phone", typeof(string));

        foreach (var contact in dataContainer.Data["Contact"])
        {
            contactTable.Rows.Add(contact["Name"], contact["Email"], contact["Phone"]);
        }

       
        DataTable countryTable = new DataTable("Country");
        countryTable.Columns.Add("Name", typeof(string));
        countryTable.Columns.Add("Code", typeof(string));
        countryTable.Columns.Add("Population", typeof(int));

        foreach (var country in dataContainer.Data["Country"])
        {
            countryTable.Rows.Add(country["Name"], country["Code"], country["Population"]);
        }

       
        dataSet.Tables.Add(contactTable);
        dataSet.Tables.Add(countryTable);

       
        Report report = new Report();

       
        //report.RegisterData(dataSet, "JSON");

        
        report.Dictionary.RegisterData(dataSet,"JSON",true);
       
        report.GetDataSource("Contact").Enabled = true; 
        report.GetDataSource("Country").Enabled = true;
       
        report.Load("Report.frx");

       
        report.Prepare();
        
        report.Export(new PDFExport(), "Report.pdf");

还有我的报告文件:

<?xml version="1.0" encoding="utf-8"?>
<Report ScriptLanguage="CSharp" ReportInfo.Created="06/01/2024 16:24:30" ReportInfo.Modified="06/01/2024 17:42:02" ReportInfo.CreatorVersion="2024.1.7.0">
  <Dictionary/>
  <ReportPage Name="Page1" Watermark.Font="Arial, 60pt">
    <ReportTitleBand Name="ReportTitle1" Width="718.2" Height="37.8"/>
    <PageHeaderBand Name="PageHeader1" Top="41.8" Width="718.2" Height="28.35">
      <TextObject Name="Text2" Left="47.25" Width="94.5" Height="18.9" Text="Name" Font="Arial, 10pt"/>
      <TextObject Name="Text4" Left="274.05" Width="94.5" Height="18.9" Text="Email" Font="Arial, 10pt"/>
      <TextObject Name="Text6" Left="519.75" Width="94.5" Height="18.9" Text="Phone" Font="Arial, 10pt"/>
    </PageHeaderBand>
    <DataBand Name="Data1" Top="74.15" Width="718.2" Height="387.45">
      <TextObject Name="Text7" Left="28.35" Top="66.15" Width="113.4" Height="18.9" Text="[Contact.Name]" Font="Arial, 10pt"/>
      <TextObject Name="Text8" Left="264.6" Top="66.15" Width="113.4" Height="18.9" Text="[Contact.Email]" Font="Arial, 10pt"/>
      <TextObject Name="Text9" Left="510.3" Top="66.15" Width="122.85" Height="18.9" Text="[Contact.Phone]" Font="Arial, 10pt"/>
    </DataBand>
    <PageFooterBand Name="PageFooter1" Top="465.6" Width="718.2" Height="406.35"/>
  </ReportPage>
</Report>

所以,结果是:

Report example

你能帮我展示表格吗? 谢谢。

c# .net report fastreport
1个回答
0
投票

您当前的报告布局仅显示一行,因为

DataBand
不会在每一行重复。显示数据源中的所有行。你应该 通过将
Data1
属性设置为
KeepTogether
,修改您的
false
带以对每行重复,这会导致每行出现在同一页面上,而不是拆分到不同页面上。

例如:

<DataBand Name="Data1" Top="74.15" Width="718.2" Height="387.45" KeepTogether="False">
    <TextObject Name="Text7" Left="28.35" Top="66.15" Width="113.4" Height="18.9" Text="[Contact.Name]" Font="Arial, 10pt"/>
    <TextObject Name="Text8" Left="264.6" Top="66.15" Width="113.4" Height="18.9" Text="[Contact.Email]" Font="Arial, 10pt"/>
    <TextObject Name="Text9" Left="510.3" Top="66.15" Width="122.85" Height="18.9" Text="[Contact.Phone]" Font="Arial, 10pt"/>
</DataBand>

请确保文本对象正确放置在数据带内。

© www.soinside.com 2019 - 2024. All rights reserved.