我尝试从代码创建 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>
所以,结果是:
你能帮我展示表格吗? 谢谢。
您当前的报告布局仅显示一行,因为
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>
请确保文本对象正确放置在数据带内。