如何在FastReport.Net中调用自定义的数据源

项目过程中需要使用到Fast Report插件来生成报表,但由于数据库的设计问题,所有数据并非是直接从数据库中直接采集,而是需要通过二次加工之后才能使用。虽然在Fast Report的官方DEMO中有使用数组或者list<>对象作为数据源的示例,但是在使用过程中却遇到了些麻烦。因为在使用报表设计器新建模版的时候,无法添加除数据库类型之外的数据源,因此无法制作模版,也就不能进行下一步工作了。 经过一番研究,最终发现了解决方法。其实这根本算不上问题,但是网上找了很多资料都没有写清楚这一点,所以就记录下来作为其他初学者的参考吧。 原来,要想绑定由程序提供的数组或者list<>对象作为数据源,必须通过程序来调用Fastreport插件的设计器,才能实现。所以,首先要在Visual Studio中添加Fastreport插件。方法很简单,在项目中添加引用,然后找到FastRepot.dll,确定即可,随后在代码中添加 using FastReport; 接着,准备原始数据。这里发现个问题,就是如果在数组中添加的是string类型的话,在FastReport中只能显示其长度,同样,如果是在List<>对象中直接添加string类型的值,也只能显示其长度。所以,只能采用变通的方法,在List<>中添加对象,再将该对象的属性赋值为string值,然后就能正常调用。 首先,新建一个类,添加属性若干
public class info
{
private string _detail;
public string detail
{
get { return _detail; }
}
public info(string detail)
{
_detail = detail;
}
}
  随后,声明List<> private List list_name ; 接着将对象添加到List<>中
string name;                              //声明一个字符串
name = "Barlcky";                      //给字符串赋值Barlcky
info info = new info(name);       //将Barlcky赋给info的name属性
list_name = new List();     //初始化一个新的list_name
list_name.Add(info);                  //将新建的info对象添加到List&lt;&gt;中
  到这里,一个简单的数据源就已经产生了,可以进行绑定工作了
Report report = new Report();          //实例化一个新的Report
report.RegisterData(list_name, "姓名");       //将list_name作为一个数据表,添加到数据源中,且命名为“姓名”
report.Design();                                           //调用设计器
  此时,完整的代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using FastReport;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public class info
{
private string _detail;
public string detail
{
get { return _detail; }
}
public info(string detail)
{
_detail = detail;
}
}
private List list_name;
private void button1_Click(object sender, EventArgs e)
{
string name; //声明一个字符串
name = "Barlcky"; //给字符串赋值Barlcky
info info = new info(name); //将Barlcky赋给info的name属性
list_name = new List(); //初始化一个新的list_name
list_name.Add(info); //将新建的info对象添加到List&lt;&gt;中

Report report = new Report(); //实例化一个新的Report
report.RegisterData(list_name, "姓名"); //将list_name作为一个数据表,添加到数据源中,且命名为“姓名”
report.Design(); //调用设计器
}
}
}
  运行这段代码,点击button1按钮, image 就会打开一个FastReport的设计器。 image 在菜单栏选择“数据”,“选择数据源”, image 在弹出的窗口中就可以看到需要的数据了。 image 接下来的就是按需建立模版,然后,将模版保存。以后只要打开这个frx文件,已经添加的数据源会依然保留,可以随意使用。但是如果需要新加数据的话,就需要修改完代码之后再次调用report.Design()方法来添加。 另外,还有个调用图片的问题。如果是保存在数据库中的图片,那么可以通过将其转换为一个Dataset来调用,具体方法可以网上搜一下。由于我的程序在调用图片的时候已经将图片保存在本地目录了,所以就采用了更为简单粗暴的方法,就是在FastReport中直接选定图片的绝对路径,这样在调用这个模版的时候就可以直接读取这张图片了。而如果程序中有地方不需要图片的话,只需要将图片文件删除或者转移就可以了,相当简单好用。当然在程序路径变化的时候,这个方法就有问题了,不过frx文件其实就是一个xml文件,用文本编辑器打开,修改一下路径,就又能用了。小聪明也不过如此了,呵呵。

你可能感兴趣的:(如何在FastReport.Net中调用自定义的数据源)