我第一次使用FastReport插件做的功能是打印一個十分復雜的excel表格,有幾百個字段都需要綁定數據,至少需要4個數據源,而且用到橫向、豎向合並單元格。
我不是直接連接數據庫,而是使用RegisterData的方式自己注冊DataSet對象,所有的表Table都是代碼生成,填充到DataSet中,然后注冊到控件中。
最開始嘗試使用這個插件做一個簡單的功能使用的就是下面的例子,不過花了一整天,還請假了4個人都沒有搞出來,晚上拿着別人的模板直接修改,然后測試,就通過了。
之前測試,一直都提示未連接到數據源,原因是我直接使用記事本來向模板添加數據源導致的,平時別人使用的數據源都是自己寫代碼,調用Design的方式得到的,而且只能是winform程序,webform程序不行,因為要啟動com組件。
下面是我總結的特別簡單的一個方式,使用RegisterData的方式自己注冊DataSet對象。
1, 選擇【File】-》【New】 新建FastReport模板,選擇下圖的1。
2, 選擇【View】-》【Data】,顯示如下,導出Dictionary,保存。
3, 編輯導出的.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>
4, 編輯模板,添加一個Table控件。
第一行直接雙擊輸入文本;第二行直接將右邊的數據源托到單元格中;
設置邊框、字體。
5, 添加事件后台方法
如下圖,選中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
6, 添加c#代碼
新建一個測試頁面test.aspx,將一個FastReport控件拖放到頁面上(只有按照過FastReport.net,且引用了FastReport.dll,FastReport.Bars.dll,FastReport.Web.dll之后才可以)
添加后頁面如下:
<body>
<form id="form1" runat="server">
<cc1:WebReport ID="webReport" runat="server" OnStartReport="WebReport_StartReport" />
</form>
</body>
后台方法:
protected void WebReport_StartReport(object sender, EventArgs e)
{
DataSet ds = new DataSet();
DataTable table1 = new DataTable();
table1.TableName = "Table1"; // 一定要設置表名稱
ds.Tables.Add(table1);
// 添加表中的列
table1.Columns.Add("姓名", typeof(string));
table1.Columns.Add("密碼", typeof(string));
// 任意添加一些數據
for (int i = 0, maxI = 10; i < maxI; i++)
{
DataRow row = table1.NewRow();
row["姓名"] = "我是" + i.ToString();
row["密碼"] = i.ToString();
table1.Rows.Add(row);
}
Report FReport = (sender as WebReport).Report;
string sPath = GetReportsPath("test.frx") ;
FReport.Load(sPath);
// 將DataSet對象注冊到FastReport控件中
FReport.RegisterData(ds);
}
/// <summary>
/// 獲取fastreport模板的路徑
/// </summary>
/// <param name="sReportName">模板名稱</param>
/// <returns>返回模板路徑</returns>
public string GetReportsPath(string sReportName)
{
return FastReport.Utils.Config.ApplicationFolder + "Reports\\" + sReportName;
}
7, 測試效果
1對應保存,可以是各種格式;
2對應打印;
3對應分頁。
http://jingyan.baidu.com/article/046a7b3ec2c744f9c37fa944.html