SunDream° 发表于 2016-5-4 00:40:56

关于将设计器中的报表显示在Viewer控件中的问题

本帖最后由 Lenka.Guo 于 2016-5-4 11:49 编辑

1,还有一个问题,如何在后台指定设计器初始化的数据连接方式使用 DataSet Provider 需要更改那些后台代码?

2,如何将设计器中的RDL或者pageReport,区域报表传入到一个包含Viewer空间的winfrom窗体中显示出预览效果,是在不保存的前提下哦~所以不能用那种读取文件路径的方式是不可以的哦~ 麻烦尽快解决这个问题,谢谢!


SunDream° 发表于 2016-5-4 16:22:00

Lenka.Guo 发表于 2016-5-4 15:00
1. 使用DataSet Provider,后台代码编写方法,区域报表见Demo:

2. 添加预览窗体


那DataSet怎么传进去的呢?数据源呢?       我怎么跑起来运行预览报错呢?

SunDream° 发表于 2016-5-4 11:11:04

没人回复吗?

Lenka.Guo 发表于 2016-5-4 11:49:02

SunDream° 发表于 2016-5-4 11:11
没人回复吗?
您的问题收到了,因为需求比较复杂,所以从收到之后,一直在研究如何实现,有了有效的解决方案会立即给您回复。

Lenka.Guo 发表于 2016-5-4 15:00:20

本帖最后由 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:33:32

本帖最后由 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;
      }

Lenka.Guo 发表于 2016-5-4 16:43:00

SunDream° 发表于 2016-5-4 16:22
那DataSet怎么传进去的呢?数据源呢?       我怎么跑起来运行预览报错呢?
您好,
您方便留个联系电话吗? 您现在主要关心的是最终用户设计器的定制功能,看您也已经发了好几个帖子都是关于这方面的功能,而每次只能解决您的一部分需求,沟通效率不高也耽误您的进度。
希望能够跟您通过电话沟通,对您现在的需求有个完整的了解,对您也能提供一个完整的解决方案,否则,每次您遇到一个新需求,我们要花很长的时间来寻找解决方案,这样耽误您的时间,而且也没有办法为您提供最有效的解决方案。还请您留个联系电话。
页: [1]
查看完整版本: 关于将设计器中的报表显示在Viewer控件中的问题