1

我按照本教程使用 C# 在 ASP.Net 中创建 RDLC 报告

在我的情况下,我想在报告向导中生成报告,就像上面的例子一样。然后生成以不同的扩展名报告。

ReportViewer1.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReportViewer1.aspx.cs" Inherits="Project_name.Report.ReportViewer1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body style="height: 170px">
    <form id="form1" runat="server">
    <div>
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <rsweb:reportviewer id="ReportViewer1" runat="server" width="600"></rsweb:reportviewer>
    </div>
    </form>
</body>
</html>

ReportViewer1.aspx.cs

using System;
using System.Configuration;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.Data;
using Project_name.Report;


namespace Project_name.Report
{
    public partial class ReportViewer1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ReportViewer1.ProcessingMode = ProcessingMode.Local;
                ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/Report.rdlc");
                DataSet dsCustomers = GetData("select top 20 * from AB_Products");
                ReportDataSource datasource = new ReportDataSource("Project_nameDataSet", dsCustomers.Tables[0]);
                ReportViewer1.LocalReport.DataSources.Clear();
                ReportViewer1.LocalReport.DataSources.Add(datasource);
            }
        }

        private DataSet GetData(string query)
        {
            string conString = ConfigurationManager.ConnectionStrings["Project_nameConnectionString"].ConnectionString;
            SqlCommand cmd = new SqlCommand(query);
            using (SqlConnection con = new SqlConnection(conString))
            {
                using (SqlDataAdapter sda = new SqlDataAdapter())
                {
                    cmd.Connection = con;

                    sda.SelectCommand = cmd;
                    using (DataSet dsCustomers = new DataSet())
                    {
                        sda.Fill(dsCustomers, "DataTable1");
                        return dsCustomers;
                    }
                }

            }
        }
    }
}

在我的情况下,我在ReportViewer1.aspx.cs文件的以下行中得到红色波浪线

   1. ReportViewer1.ProcessingMode = ProcessingMode.Local;
   2. ReportViewer1.LocalReport.ReportPath = Server.MapPath("~/Report.rdlc");
   3. ReportViewer1.LocalReport.DataSources.Clear();
   4. ReportViewer1.LocalReport.DataSources.Add(datasource);

当我将鼠标悬停在上面的线上时,它分别向我显示以下错误

1.'ReportViewer1' does not contain definition for 'ProcessingMode'
2.'ReportViewer1' does not contain definition for 'LocalReport'
3.'ReportViewer1' does not contain definition for 'LocalReport'
4.'ReportViewer1' does not contain definition for 'LocalReport'

这是我的文件夹层次结构

在此处输入图像描述

我该怎么做才能完成这件事。这个问题是由于错误的连接字符串而发生的吗?还是由于引用了错误的数据资源?

4

1 回答 1

1

问题是您的web.config文件不包含 ReportViewer 控件所需的程序集引用。

<system.web>
    <compilation debug="true" targetFramework="4.5.1">
      <assemblies>
        <add assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
        <add assembly="Microsoft.ReportViewer.Common, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845DCD8080CC91"/>
        <add assembly="Microsoft.Build.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
      </assemblies>
    </compilation>
</system.web>

而且您很可能还缺少ReportViewer1.aspx.designer.cs文件中控件的声明。

public partial class ReportViewer1 {

    /// <summary>
    /// form1 control.
    /// </summary>
    /// <remarks>
    /// Auto-generated field.
    /// To modify move field declaration from designer file to code-behind file.
    /// </remarks>
    protected global::System.Web.UI.HtmlControls.HtmlForm form1;

    /// <summary>
    /// ReportViewer1 control.
    /// </summary>
    /// <remarks>
    /// Auto-generated field.
    /// To modify move field declaration from designer file to code-behind file.
    /// </remarks>
    protected global::Microsoft.Reporting.WebForms.ReportViewer ReportViewer1;
}

但最简单的做法是首先按照正确的方法创建 WebForm,然后 Visual Studio 将为您添加引用。首先,将 Web 表单添加到您的 MVC 项目。

  1. 右键单击解决方案资源管理器中的项目,然后转到添加 > Web 表单。
  2. 给表单一个描述性的名称。

在此处输入图像描述

然后添加ReportViewer控件。

  1. 单击工具箱(通常位于 Visual Studio 的左侧)。
  2. 打开Reporting扩展部分。
  3. 将 ReportViewer 拖放到<form>页面上的标记中。

在此处输入图像描述

然后你会得到一个看起来像这样的表单:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="MvcApplication11.WebForm1" %>

<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <rsweb:ReportViewer ID="ReportViewer1" runat="server"></rsweb:ReportViewer>
    </div>
    </form>
</body>
</html>

然后您可以将代码添加到代码隐藏文件中(在本例中为WebForm1.aspx.cs)。您将能够访问该页面/WebForm1.aspx,但如果您喜欢使用 .NET 路由,您可以更改 URL。

参考:https ://msdn.microsoft.com/en-us/library/aa337091.aspx

于 2015-09-08T05:15:47.610 回答