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();

效果如上:

猜你喜欢

转载自blog.csdn.net/qq_34719168/article/details/80943227