C#下水晶报表的数据动态绑定(推模式, 非关联数据库)
时间:2011-05-23 来源:沧海小小粟
因为项目的中的数据是来源于网络, 而不是数据库, 所有的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();
}
// 显示水晶报表
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; // 加载报表
}
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 数据集" , 将表加入到"选定的表"中, 再回到视图下就可以把需要在报表显示的列(字段)拖动 报表中的"详细字段"中.
这样就实现了一个基本的水晶报表动态的数据绑定.