因為項目的中的資料是來源於網路, 而不是資料庫, 所有的table 都是動態建立的, 因此使用報表時也需要動態建立.
具體樣本如下:
1. MainForm 下 Data的 擷取:
public DataTable table = new DataTable("myTable");
// 建立資料表資料
public void CreateDataTable()
{
table.Columns.Clear();
DataColumn column = new DataColumn("userName", Type.GetType("System.String"));
column.Caption = column.ColumnName;
table.Columns.Add(column);
table.Rows.Clear();
for (int i = 0; i < 8; i++)
{
DataRow newRow = table.NewRow();
newRow[1] = "Name " + i.ToString();
table.Rows.Add(newRow);
}
}
2 顯示報表表單:
調用的是帶1個參數的 報表表單的建構函式:
// 顯示水晶報表
private void btnCrystalReport_Click(object sender, EventArgs e)
{
FormCrystal frmreport = new FormCrystal(table);
frmreport.Text = "水晶報表示例";
frmreport.WindowState = FormWindowState.Maximized;
frmreport.ShowDialog();
frmreport.Dispose();
}
3. 報表表單的建構函式(帶1個參數):
public FormCrystal(DataTable table)
{
InitializeComponent();
ReportDocument doc = new ReportDocument();
string rptname= @"D:\C#.Projects\CSProjects\csReportExam\CrystalReport1.rpt"; // 設計的報表
doc.Load(rptname);
doc.SetDataSource(table); // 設定資料來源
this.crystalReportViewer1.ReportSource = doc; // 載入報表
}
4. 水晶報表的設計:
(1). 報表表單上放置一 CrystalReportViewer 控制項, 並建立 一個報表: CrystalReport1.rpt;
(2). 應用程式項目添加新項目: 資料 -- 資料集 , 儲存為 DataSet1.Xsd;
(3). 在資料集視圖下, 添加 Table , 此時主要名字一定要和 傳遞過來的表名一致, 命名為 myTable; 按照 myTable 中的 Column 添加列, 這裡只有一個: userName, 命名也要保持一致.(這裡很關鍵, 否則報表中就不能顯示出資料.)
(4). 在報表設計檢視下, 開啟"資料庫專家", 選 "項目資料" -- "ADO.NET 資料集" , 將表加入到"選定的表"中, 再回到視圖下就可以把需要在報表顯示的列(欄位)拖動 報表中的"詳細欄位"中.
這樣就實現了一個基本的水晶報表動態資料繫結.