使用实体框架在ASP.Net中创建报表

Dar*_*ght 29 asp.net entity-framework reporting-services

我们希望将Microsoft Reports - SSRS添加到我们的一个内部网站.

该数据库已安装所有报告功能.

该网站正在使用Entity Framework 4获取所有数据.

我已经能够使用传统的创建DataSet(*.XSD)的方式创建报表,这很有效.

但我的问题是,是否可以利用网站中现有的实体框架来获取报告所需的数据?而不是必须重新发明轮子并制作整个DataSet,以及关系等.

这是一个网站,而不是应用,所以这(http://weblogs.asp.net/rajbk/archive/2010/05/09/creating-an-asp-net-report-using-visual-studio-2010-part- 1.aspx)似乎不适用; 我没有看到DataSource(在教程的第2部分)

更新

作为旁注,我们希望避开昂贵的第三方控件等.

另外,查看问题的另一种方法可能是从实体框架实体模型生成*.XSD; 这可能吗?这不是理想的,但会让我们开始运行..

Sta*_*ace 9

下面是我在一个.NET winForms应用程序中设置报表数据源的快速示例.

public  void getMyReportData()
    {
        using (myEntityDataModel v = new myEntityDataModel())
        {

            var reportQuery = (from r in v.myTable
                                   select new
                                   {
                                       l.ID,
                                       l.LeaveApplicationDate,
                                       l.EmployeeNumber,
                                       l.EmployeeName,
                                       l.StartDate,
                                       l.EndDate,
                                       l.Supervisor,
                                       l.Department,
                                       l.Col1,
                                       l.Col2,
                                       .......,
                                       .......,
                                       l.Address
                                   }).ToList();


            reportViewer1.LocalReport.DataSources.Clear();
            ReportDataSource datasource = new ReportDataSource("nameOfReportDataset", reportQuery);
            reportViewer1.LocalReport.DataSources.Add(datasource);

            Stream rpt = loadEmbededReportDefinition("Report1.rdlc");
            reportViewer1.LocalReport.LoadReportDefinition(rpt);
            reportViewer1.RefreshReport();

            //Another way of setting the reportViewer report source

            string exeFolder = Path.GetDirectoryName(Application.ExecutablePath);
            string reportPath = Path.Combine(exeFolder, @"rdlcReports\Report1.rdlc");
            reportViewer1.LocalReport.ReportPath = reportPath;

            reportParameter p = new ReportParameter("DeptID", deptID.ToString());
            reportViewer1.LocalReport.SetParameters(new[] { p });

        }
    }




    public static Stream loadEmbededReportDefinition(string reportName)
        {
            Assembly _assembly = Assembly.GetExecutingAssembly();
            Stream _reportStream = _assembly.GetManifestResourceStream("ProjectNamespace.rdlcReportsFolder." + reportName);

            return _reportStream;
        }
Run Code Online (Sandbox Code Playgroud)


M S*_*rer 8

我的方法一直是将RDLC文件与对象数据源一起使用,并以"本地"模式运行它们.这些数据源是......我的实体!这样,我使用了我用于我的网络应用程序的所有相同的业务逻辑,字符串格式,文化意识等.有一些怪癖,但我能够和他们住在一起:

  • RDLC文件不喜欢在Web项目中生活.我们创建一个单独的虚拟winform项目并在那里添加RDLC文件.
  • 我没有在观众中显示报告.我让用户下载PDF,Word或Excel文件,然后选择在本机查看器中保存或打开.这样可以避免一些麻烦,但可以根据需要放弃一些人.对于移动设备,它非常好.
  • 由于您没有使用SSRS,因此您无法获得良好的订阅功能.如果需要,您将构建它.但在很多方面,我更喜欢这个.

但是,好处非常好:

  • 我正在使用我已经为我的观点编写的所有相同的业务逻辑优势.
  • 我有一个自定义的ReportActionResult和DownloadReport控制器方法,它允许我通过单个URL实质上运行任何报告.这非常方便.它确实使自定义订阅组件更容易.
  • 报告开发似乎很快,现在我只需要调整实体部分类来在这里或那里调整一些东西.另外 - 如果我需要稍微改变数据的形状,我有LINQ.


JMa*_*Man 0

您可以使用 WCF 服务作为数据源,以便为报告重新使用应用程序数据和逻辑。至少我认为这需要 SQL-server 标准版。所以免费的 SQL-express 版本是不行的。