radl+ReportViewer (转)
|
真正的全动态报表:RDLC+ReportViewer 阅读本文需要有 XML解析 及 ADO.net 相关经验。 本文编译器使用 Visual Studio 2005 数据库采用XML格式 ReportView 版本为2.0 .net版本为2.0 Crystal Repotrs的功能固然很强大,但是对我们写程序的人来说,是否支持动态生成才是最重要的。如果报表只能静态生成再嵌入到程序中,实在有些没意思。 二、结构模型
猛的一看有点复杂呵呵,其实还是挺简单的。 数据源 三、示例代码 请大家注意: 1. 这里我呈现给大家的只是如何实现报表,报表本身的制作 及 RDLC描述语言不在讨论范围。ADO.net同样不在讨论范围,感兴趣的读者可以参考这篇文章:《用VC轻松实现 ADO.net》。 //连接XML文件
DataSet^ DateSet1 = gcnew DataSet();
DataSet1->ReadXml("XML文件");
4.一系列的数据填充 BindingSource^ aBindingSource;
ReportDataSource^ reportDataSource1;
//根据DateSet1设置BindingSource
aBindingSource = gcnew BindingSource();
aBindingSource->DataMember = "Table1"; //注意,表名要同创建报表时用的相同
aBindingSource->DataSource = DataSet1;
//根据BindingSource设置ReportDataSource
reportDataSource1 = gcnew ReportDataSource();
reportDataSource1->Name = "DataSet1_Table1";
reportDataSource1->Value = aBindingSource;
//根据ReportDataSource设置ReportViewer控件的数据源,ReportViewer控件最终用来显示报表
reportViewer1->LocalReport->DataSources->Add(reportDataSource1);
reportViewer2->LocalReport->DataSources->Add(reportDataSource1);
..... //多个报表窗口可以使用同一个数据源
5.连接要显示的报表 reportViewer1->LocalReport->ReportPath = "rdlc文件1";
reportViewer2->LocalReport->ReportPath = "rdlc文件2";
.....
6.显示报表 reportViewer1->RefreshReport();
reportViewer2->RefreshReport();
.....
7.报表的动态修改对于普通的数据,只需修改DataSet即可 DataRow^ row = DataSet1->Tables["Table1"]->NewRow();
row[0] = newd->comboBox1->Text; //假设数据来自comboBox控件
row[1] = newd->comboBox2->Text;
.....
DataSet1->Tables["Table1"]->Rows->Add(row);
//刷新一下报表
reportViewer1->RefreshReport();
reportViewer2->RefreshReport();
.....
对于图表之类的数据,需解析RDLC文件,修改之,然后调用RefreshReport()。由于其格式是XML文本,故比较容易,这方面不再多说,感兴趣的读者可以自己解析一下。
四、示例程序 在示例程序中我提供了一个记账本功能的小程序,使用XML数据库文件,两张RDLC报表文件。由于时间关系,没有去做RDLC文件解析,请大家见谅。
|



浙公网安备 33010602011771号