FastReport使用DataSet作数据源
1、打开FastReport的设计器,
2、选择【File】-》【New】 新建FastReport模板。
3、选择【View】-》【Data】,显示如下,导出Dictionary,保存。
4、编辑导出的.frd文件,编辑完后保存,再导入。
(1) TableDataSource 是数据源节点。
(2) Name是DataSet对象的Table的表名。
(3) Column是Table的列,模板绑定数据时,使用Column的Name属性。如下:
<?xml version="1.0" encoding="utf-8"?>
<Dictionary>
<TableDataSource Name="Table1" ReferenceName="Data.Table1" DataType="System.Int32" Enabled="true">
<Column Name="姓名" DataType="System.String" PropName="Column"/>
<Column Name="密码" DataType="System.String" PropName="Column"/>
</TableDataSource>
</Dictionary>
5、编辑模板,添加一个Table控件。
第一行直接双击输入文本;
第二行直接将右边的数据源托到单元格中;
设置边框、字体。
6、
添加事件后台方法
如下图,选中Table1,在事件ManualBuild的后面双击,添加下面的代码:
// 控件Table1的构建事件
private void Table1_ManualBuild(object sender, EventArgs e)
{
DataSourceBase data1 = Report.GetDataSource("Table1"); // 获取DataSet中表名为Table1的数据源
data1.Init(); // 初始化
Table1.PrintRow(0); // 控件Table1打印第0行
Table1.PrintColumns(); // 每打印一行,都要调用 PrintColumn或PrintColumns
while(data1.HasMoreRows) // 打印重复循环的行
{
Table1.PrintRow(1);
Table1.PrintColumns();
data1.Next(); // 读取下一行
}
}
说明:
(1) Table控件是从第0行开始的。
(2) 绑定数据的重复行,算作一行。
(3) 输出行之前,要先调用Init() 方法,当有两个数据源,比如data1和data2,data1又是data2的父数据源,需要把data1当做参数,如 data2.Init(data1);
(4) 每打印一行,都要调用 PrintColumn或PrintColumns
部分winform调用代码:
/// <summary> /// 报表 /// </summary> private FastReport.Report FReport; /// <summary> /// 数据源 /// </summary> private DataSet FDataSet; /// <summary> /// 模板地址 /// </summary> private string _reportFolder = Application.StartupPath + "\\ReportMd\\"; FReport = new FastReport.Report(); FReport.Preview = preview1;//preview1是private FastReport.Preview.PreviewControl preview1; string reportName = _reportFolder + "rpBalance.frx"; string sql = "SELECT a,b,c FROM table"; FDataSet = DBUtility.DbHelperSQL.Query(sql); FDataSet.Tables[0].TableName = "Table1";//数据源名称 FReport.Load(reportName); FReport.RegisterData(FDataSet); FReport.Parameters[0].Value = FDataSet.Tables[0].Rows.Count.ToString();//参数 FReport.Prepare(); FReport.ShowPrepared();