有的時候,我們需要對一堆數據進行統計分析后生成HTML或Excel格式報表。本來這並不是一件很難的事,但確是件比較麻煩的事情。最令人頭痛的是遇到領導下發的臨時緊急任務的時候,往往領導都不知道到底要什么報表,只是給你一堆數據先讓你出一個分析報告,當你上繳分析報告后,領導會針對分析結果讓你再出一個分析報告… 。這時要是有一個快速生成報表的工具就非常方便了。
現在,我們可以通過DoddleReport來快速生成報表。一個簡單的示例如下:
假定我們的數據對象為如下格式:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public double Price { get; set; }
public int OrderCount { get; set; }
public DateTime LastPurchase { get; set; }
public int UnitsInStock { get; set; }
}
數據源通如下函數生成:
static IEnumerable<Product> GetAllData()
{
var rand = new Random();
return Enumerable.Range(1, 20).Select(
i => new Product
{
Id = i,
Name = "Product " + i,
Description = "This is an example description",
Price = rand.NextDouble() * 100,
OrderCount = rand.Next(1000),
LastPurchase = DateTime.Now.AddDays(rand.Next(1000)),
UnitsInStock = rand.Next(0, 2000)
});
}
要對該數據源生成報表,則只需要如下幾步:
1. 通過ToReportSource擴展函數將數據源轉換為Report對象
// Create the report and turn our query into a ReportSource
var report = new Report(GetAllData().ToList().ToReportSource());
// Customize the Text Fields
report.TextFields.Title = "Products Report";
report.TextFields.SubTitle = "This is a sample report showing how Doddle Report works";
report.TextFields.Footer = "Copyright 2011 © The Doddle Project";
report.TextFields.Header = string.Format(@" Report Header Demo");
// Render hints allow you to pass additional hints to the reports as they are being rendered
report.RenderHints.BooleanCheckboxes = true;
3. 對輸出的字段進行格式控制
// Customize the data fields
report.DataFields["Id"].Hidden = true;
report.DataFields["Price"].DataFormatString = "{0:c}";
report.DataFields["LastPurchase"].DataFormatString = "{0:d}";
4. 輸出為報表
using (var outputStream = File.Create(@"r:\report.html"))
{
var writer = new DoddleReport.Writers.HtmlReportWriter();
writer.WriteReport(report, outputStream);
}
這樣,我們就可以得到如下的報表:
使用起來非常簡單,但基本上該有的都有,還是非常不錯的。其中2,3兩步是可以省略的,最簡單的方式下,只要如下幾行即可:
// Create the report and turn our query into a ReportSource
var report = new Report(GetAllData().ToList().ToReportSource());
using (var outputStream = File.Create(@"r:\report.html"))
{
var writer = new DoddleReport.Writers.HtmlReportWriter();
writer.WriteReport(report, outputStream);
}
值得一提的是,DoddleReport支持的輸出給事非常豐富:PDF、EXCEL、HTML、CSV等常用的格式都支持,也能直接在Asp.net中輸出成在線報表。例如,我們只要把上面例子中的"Writers.HtmlReportWriter"改成"OpenXml.ExcelReportWriter"就可以生成Excel格式的報表,非常強大而方便。