关于将设计器中的报表显示在Viewer控件中的问题
本帖最后由 Lenka.Guo 于 2016-5-4 11:49 编辑1,还有一个问题,如何在后台指定设计器初始化的数据连接方式使用 DataSet Provider 需要更改那些后台代码?
2,如何将设计器中的RDL或者pageReport,区域报表传入到一个包含Viewer空间的winfrom窗体中显示出预览效果,是在不保存的前提下哦~所以不能用那种读取文件路径的方式是不可以的哦~ 麻烦尽快解决这个问题,谢谢!
Lenka.Guo 发表于 2016-5-4 15:00
1. 使用DataSet Provider,后台代码编写方法,区域报表见Demo:
2. 添加预览窗体
那DataSet怎么传进去的呢?数据源呢? 我怎么跑起来运行预览报错呢? 没人回复吗? SunDream° 发表于 2016-5-4 11:11
没人回复吗?
您的问题收到了,因为需求比较复杂,所以从收到之后,一直在研究如何实现,有了有效的解决方案会立即给您回复。 本帖最后由 Lenka.Guo 于 2016-5-4 16:10 编辑
1. 使用DataSet Provider,后台代码编写方法,区域报表见Demo:
public static PageReport AddDataSetDataSource(PageReport report)
{
// create DataSource for the report
DataSource dataSource = new DataSource();
dataSource.Name = "Reels Database";
<font color="#ff0000"> dataSource.ConnectionProperties.DataProvider = "DATASET";</font>
dataSource.ConnectionProperties.<font color="#ff0000">ConnectString </font>= "";
//Create DataSet with specified query and load database fields to the DataSet
DataSet dataSet = new DataSet();
Query query = new Query();
dataSet.Name = "Sample DataSet";
query.DataSourceName = "Reels Database";
query.CommandType = QueryCommandType.Text;
query.CommandText = "";
dataSet.Query = query;
String[] fieldsList = new String[] { "MoviedID", "Title", "YearReleased", "MPAA" };
foreach (string fieldName in fieldsList)
{
Field field = new Field(fieldName, fieldName, null);
dataSet.Fields.Add(field);
}
//create report definition with specified DataSet and DataSource
report.Report.DataSources.Add(dataSource);
report.Report.DataSets.Add(dataSet);
return report;
}
2. 添加预览窗体
实现思路:
1. 添加新窗体 ReportViewer.cs窗体,添加ReportViewer,实现ReportViewer_Load方法
namespace GrapeCity.ActiveReports.Samples.CreateReport
{
public partial class ReportViewer : Form
{
public ReportViewer()
{
InitializeComponent();
}
public Object Report
{ get; set; }
public DesignerReportType ReportType
{ get; set; }
private void ReportViewer_Load(object sender, EventArgs e)
{
switch (ReportType)
{
case DesignerReportType.Page:
case DesignerReportType.Rdl:
PageReport report1 = Report as PageReport;
viewer1.LoadDocument(report1.Document);
break;
case DesignerReportType.Section:
SectionReport report3 = Report as SectionReport;
viewer1.Document = report3.Document;
report3.Run();
break;
default:
break;
}
}
}
}
2. 修改ReportForm中的文件菜单:
private void CreateFileMenu(ToolStripDropDownItem fileMenu)
{
// 添加预览报表菜单
fileMenu.DropDownItems.Add(new ToolStripMenuItem("预览", null, new EventHandler(OnViewReport)));}
3. 实现OnviewReport方法。
// 打开预览窗口
private void OnViewReport(object sender, EventArgs e)
{
ReportViewer viewer = new ReportViewer();
viewer.Report = reportDesigner.Report;
viewer.ReportType = reportDesigner.ReportType;
viewer.ShowDialog();
}
Demo 下载:
本帖最后由 Lenka.Guo 于 2016-5-4 16:36 编辑
SunDream° 发表于 2016-5-4 16:22
那DataSet怎么传进去的呢?数据源呢? 我怎么跑起来运行预览报错呢?
1. 预览之前,把报表的数据源先删除掉,因为用的是DataSetProvide 在后台邦数据的。
2. DataSet 怎么传进去?传连接字符串,和查询语句?请仔细查看Demo源码。
public static PageReport AddDataSetDataSource(PageReport report)
{
// create DataSource for the report
DataSource dataSource = new DataSource();
dataSource.Name = "Reels Database";
dataSource.ConnectionProperties.DataProvider = "DATASET";
dataSource.ConnectionProperties.ConnectString= "";//输入连接数据库字符串
//Create DataSet with specified query and load database fields to the DataSet
DataSet dataSet = new DataSet();
Query query = new Query();
dataSet.Name = "Sample DataSet";
query.DataSourceName = "Reels Database";
query.CommandType = QueryCommandType.Text;
query.CommandText = "";//输入查询语句
dataSet.Query = query;
String[] fieldsList = new String[] { "MoviedID", "Title", "YearReleased", "MPAA" };
foreach (string fieldName in fieldsList)
{
Field field = new Field(fieldName, fieldName, null);
dataSet.Fields.Add(field);
}
//create report definition with specified DataSet and DataSource
report.Report.DataSources.Add(dataSource);
report.Report.DataSets.Add(dataSet);
return report;
}
SunDream° 发表于 2016-5-4 16:22
那DataSet怎么传进去的呢?数据源呢? 我怎么跑起来运行预览报错呢?
您好,
您方便留个联系电话吗? 您现在主要关心的是最终用户设计器的定制功能,看您也已经发了好几个帖子都是关于这方面的功能,而每次只能解决您的一部分需求,沟通效率不高也耽误您的进度。
希望能够跟您通过电话沟通,对您现在的需求有个完整的了解,对您也能提供一个完整的解决方案,否则,每次您遇到一个新需求,我们要花很长的时间来寻找解决方案,这样耽误您的时间,而且也没有办法为您提供最有效的解决方案。还请您留个联系电话。
页:
[1]