fastreport使用第一例
用报表设计器设计报表:(包含多个表格)
第一步:设计出下面样式:
第二步:在configure里ADD时,注意一下,选择数据区时要占到空白才能新建数据,有了数据后,选中数据,才能给数据添加数据头和数据脚。
第三步:在DATA属性页,新增加数据,用的方法是,先选择Save Dictionary,保存至文件,再修改文件内容如下面的XML样式。再选择Open Dictionary选择进来。就会出现下面的数据源中二个表。在Parameters上右击,增加新参数。
修改成如下内容:
<?xml version="1.0" encoding="utf-8"?>
<Dictionary>
<TableDataSource Name="Table" ReferenceName="Data.Table" DataType="System.Int32" Enabled="true">
<Column Name="单据标志" DataType="System.String" PropName="Column"/>
<Column Name="单据类型" DataType="System.String" PropName="Column"/>
<Column Name="采购金额" DataType="System.String" PropName="Column"/>
<Column Name="零售金额" DataType="System.String" PropName="Column"/>
<Column Name="进销差价" DataType="System.String" PropName="Column"/>
</TableDataSource>
<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"/>
<Column Name="采购金额" DataType="System.String" PropName="Column"/>
<Column Name="零售金额" DataType="System.String" PropName="Column"/>
<Column Name="进销差价" DataType="System.String" PropName="Column"/>
</TableDataSource>
</Dictionary>
第四步:在属性页的报表树,将table1和table2添加事件如下:事件代码如下。
private void Table1_ManualBuild(object sender, EventArgs e)
{
DataSourceBase data1 = Report.GetDataSource("Table"); // 获取DataSet中表名为Table的数据源
data1.Init(); // 初始化
Table1.PrintRow(0); // 控件Table打印第0行
Table1.PrintColumns(); // 每打印一行,都要调用 PrintColumn或PrintColumns
while(data1.HasMoreRows) // 打印重复循环的行
{
Table1.PrintRow(1);
Table1.PrintColumns();
data1.Next(); // 读取下一行
}
}
private void Table2_ManualBuild(object sender, EventArgs e)
{
DataSourceBase data1 = Report.GetDataSource("Table1"); // 获取DataSet中表名为Table1的数据源
data1.Init(); // 初始化
Table2.PrintRow(0); // 控件Table1打印第0行
Table2.PrintColumns(); // 每打印一行,都要调用 PrintColumn或PrintColumns
while(data1.HasMoreRows) // 打印重复循环的行
{
Table2.PrintRow(1);
Table2.PrintColumns();
data1.Next(); // 读取下一行
}
}
到此报表设计器的操作结束,接下来,就是winform里面的调用代码。
第五步:新建一个窗体应用,引用相应DLL。
本机都在C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\FastReport.Editor\v4.0_2016.1.0.0__db7e5ce63278458c\下面。
放一个button,点出后出报表。事件如下:
DataSet ds = new DataSet();
DataTable table1 = new DataTable();
table1.TableName = "Table"; // 一定要设置表名称
ds.Tables.Add(table1);
// 添加表中的列
table1.Columns.Add("单据标志", typeof(string));
table1.Columns.Add("单据类型", typeof(string));
table1.Columns.Add("采购金额", typeof(string));
table1.Columns.Add("零售金额", typeof(string));
table1.Columns.Add("进销差价", typeof(string));
DataTable table2 = new DataTable();
table2.TableName = "Table1"; // 一定要设置表名称
ds.Tables.Add(table2);
table2.Columns.Add("单据标志", typeof(string));
table2.Columns.Add("单据类型", typeof(string));
table2.Columns.Add("采购金额", typeof(string));
table2.Columns.Add("零售金额", typeof(string));
table2.Columns.Add("进销差价", typeof(string));
所需要的数据自己读取出来,赋值进二个datatable。
foreach (DataRow row in tableTemp.Rows)
{
DataRow row1 = table1.NewRow();
row1["单据标志"] = row["单据标志"];
row1["单据类型"] = row["单据类型"];
row1["采购金额"] = row["采购金额"];
row1["零售金额"] = row["零售金额"];
row1["进销差价"] = row["进销差价"];
table1.Rows.Add(row1);
}
foreach (DataRow row in tableTemp.Rows)
{
DataRow row1 = table2.NewRow();
row1["单据标志"] = row["单据标志"];
row1["单据类型"] = row["单据类型"];
row1["采购金额"] = row["采购金额"];
row1["零售金额"] = row["零售金额"];
row1["进销差价"] = row["进销差价"];
table2.Rows.Add(row1);
}
下面是报表操作代码
Report FReport = new Report();
string sPath = Application.StartupPath + @"test.frx";
FReport.Load(sPath);
//设置参数
FReport.Parameters.Clear();
//送入时间参数,就是报表里添加的参数
Parameter v_param = new Parameter();
v_param.Name = "YearMonth";//这里的参数名对应报表里的参数名称
v_param.Value = "2099-05-30/2099-06-26";
FReport.Parameters.Add(v_param);
// 将DataSet对象注册到FastReport控件中
FReport.RegisterData(ds);
FReport.GetDataSource(ds.Tables["Table"].TableName).Enabled = true; //这里的Table对应报表里的数据源
FReport.GetDataSource(ds.Tables["Table1"].TableName).Enabled = true;//这里的Table1对应报表里的数据源
FReport.Show();
效果如上: