主题:[原创]通过查询填充ReportViewer报表以及与CrystalReportViewer的比较
[b]此篇自我总结了在程序中实现用数据库的查询填充ReportViewer报表以及ReportViewer与CrystalReportViewer的比较[/b]
1、[b]ReportViewer与CrystalReportViewer的比较[/b](个人见解,有不同意见大家一起讨论)
ReportViewer的优势:
对于表格式的报表,ReportViewer具有其独特的优势。在ReportViewer的报表设计工具栏中就包含了Table控件,将Table控件放于Body中,很容易设置整个Table及Table中任何一格的边框、字体、对齐格式等显示格式。设计好后,打印出来的结果就是一张格式化同一的表格;而在CrystalReportViewer的报表设计中需要自己对每个字段进行设置,如果需要表格,只能通过自己画线实现。
ReportViewer的劣势:
对于分类汇总很难实现,而CrystalReportViewer中只需要右键->插入即可实现;其次ReportView中字段的格式设置没有CrystalReportViewer中方便、直观,常常需要记住格式化字符和一些常用的格式化函数,而CrystalReportViewer中直接通过点击右键弹出属性对话框进行设置。
所以,我觉得如果所需要报表为表格样式,最好用ReportViewer;对于其它比较灵活样式的设计,采用CrystalReportViewer;另外对于需要分类汇总信息的,当然采用CrystalReportViewer会简单很多。
2、[b]在程序中实现用数据库的查询填充ReportViewer报表[/b]
其实实现ReportViewer显示动态查询结果的方法很简单。选中ReportViewer,可以看到其右上角的小三角图标,点击弹出对话框,选择Choose Data Sources,窗体上会增加DataSet、BindingSource和TableAdapter三个控件,并且程序中添加了如下两行代码
// TODO: This line of code loads data into the 'GYHRDataSet.tbl_SellMain' table. You can move, or remove it, as needed.
this.tbl_SellMainTableAdapter.Fill(this.GYHRDataSet.tbl_SellMain);
通过第一行注释可以看到,可以通过需要删除、修改此代码,通过第二行代码我们可以看到其实现就是用TableAdapter填充Table。由此我们注释掉这行代码,添加上自己的代码:
SqlConnection conn = new SqlConnection("Persist Security Info=false;Integrated Security=SSPI;" +
"Initial Catalog=GYHR;server=(local)");
//定义一个SqlDataAdapter
SqlDataAdapter da = new SqlDataAdapter("select * from tbl_SellMain where 操作员='Administrator'", conn);
da.Fill(this.GYHRDataSet.tbl_SellMain);
至此,窗体中的TableAdapter控件并可以删除了,当然不删除也没有多大影响。
这样,报表中显示的结果就为查询语句select * from tbl_SellMain where 操作员='Administrator'所查询的结果。
[color=800000]补充说明:当多次用适配器内容填充同一个表时,报表中将显示所有填充到表中的内容。[/color]
1、[b]ReportViewer与CrystalReportViewer的比较[/b](个人见解,有不同意见大家一起讨论)
ReportViewer的优势:
对于表格式的报表,ReportViewer具有其独特的优势。在ReportViewer的报表设计工具栏中就包含了Table控件,将Table控件放于Body中,很容易设置整个Table及Table中任何一格的边框、字体、对齐格式等显示格式。设计好后,打印出来的结果就是一张格式化同一的表格;而在CrystalReportViewer的报表设计中需要自己对每个字段进行设置,如果需要表格,只能通过自己画线实现。
ReportViewer的劣势:
对于分类汇总很难实现,而CrystalReportViewer中只需要右键->插入即可实现;其次ReportView中字段的格式设置没有CrystalReportViewer中方便、直观,常常需要记住格式化字符和一些常用的格式化函数,而CrystalReportViewer中直接通过点击右键弹出属性对话框进行设置。
所以,我觉得如果所需要报表为表格样式,最好用ReportViewer;对于其它比较灵活样式的设计,采用CrystalReportViewer;另外对于需要分类汇总信息的,当然采用CrystalReportViewer会简单很多。
2、[b]在程序中实现用数据库的查询填充ReportViewer报表[/b]
其实实现ReportViewer显示动态查询结果的方法很简单。选中ReportViewer,可以看到其右上角的小三角图标,点击弹出对话框,选择Choose Data Sources,窗体上会增加DataSet、BindingSource和TableAdapter三个控件,并且程序中添加了如下两行代码
// TODO: This line of code loads data into the 'GYHRDataSet.tbl_SellMain' table. You can move, or remove it, as needed.
this.tbl_SellMainTableAdapter.Fill(this.GYHRDataSet.tbl_SellMain);
通过第一行注释可以看到,可以通过需要删除、修改此代码,通过第二行代码我们可以看到其实现就是用TableAdapter填充Table。由此我们注释掉这行代码,添加上自己的代码:
SqlConnection conn = new SqlConnection("Persist Security Info=false;Integrated Security=SSPI;" +
"Initial Catalog=GYHR;server=(local)");
//定义一个SqlDataAdapter
SqlDataAdapter da = new SqlDataAdapter("select * from tbl_SellMain where 操作员='Administrator'", conn);
da.Fill(this.GYHRDataSet.tbl_SellMain);
至此,窗体中的TableAdapter控件并可以删除了,当然不删除也没有多大影响。
这样,报表中显示的结果就为查询语句select * from tbl_SellMain where 操作员='Administrator'所查询的结果。
[color=800000]补充说明:当多次用适配器内容填充同一个表时,报表中将显示所有填充到表中的内容。[/color]