Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用报表查看器并请求数据源时,不会显示“我的数据访问类”_C#_Asp.net_Report Viewer2010 - Fatal编程技术网

C# 使用报表查看器并请求数据源时,不会显示“我的数据访问类”

C# 使用报表查看器并请求数据源时,不会显示“我的数据访问类”,c#,asp.net,report-viewer2010,C#,Asp.net,Report Viewer2010,我不熟悉使用报表查看器控件 我当前创建报表的方法是调用存储过程并插入输入参数以查询数据库中的表并返回行列表 行被插入到数据表中并返回数据表 数据表绑定到用户可以查看的gridview 现在我的问题 我想使用报表查看器来显示数据,而不是gridview,这样用户就可以轻松地导出数据并用它查看一个漂亮的图形 存储过程是从我的数据访问类调用的,该类只是我在项目中拥有的一个类(它不在文件夹中) 当我去创建报表查看器并被要求提供数据源时,我的数据访问类不会显示出来。如何从存储过程函数中获取结果(返回的数据

我不熟悉使用报表查看器控件

我当前创建报表的方法是调用存储过程并插入输入参数以查询数据库中的表并返回行列表

行被插入到数据表中并返回数据表

数据表绑定到用户可以查看的gridview

现在我的问题

我想使用报表查看器来显示数据,而不是gridview,这样用户就可以轻松地导出数据并用它查看一个漂亮的图形

存储过程是从我的数据访问类调用的,该类只是我在项目中拥有的一个类(它不在文件夹中)


当我去创建报表查看器并被要求提供数据源时,我的数据访问类不会显示出来。如何从存储过程函数中获取结果(返回的数据表)以插入报表查看器?

您可以尝试编程方法

//Load Report Definition.
// From File.
ReportViewer1.LocalReport.ReportPath = "C:\\Report.rdlc";
//Load Report Data.
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", data));
//Refresh Control.
ReportViewer1.LocalReport.Refresh();
如果有一个包含数据的DataTable,只需将其作为数据源添加到ReportViewer即可。“DataSet1”是当前加载到报表查看器的报表中的数据集的名称

所以,如果您使用的是实体框架,它将是这样的

//Create Connection.
Entities db = new Entities();

//Get the Data Using the query supplied (Where Entities.SomeObject is the Entity to retrieve data).
IQueryable<Object> data = db.CreateQuery<Object>("SELECT VALUE c FROM Entities.SomeObject AS c WHERE c.SomeValue> 0");

//Reset Control. Doesn't Usually work if this is skipped for some reason.
ReportViewer1.Reset();
//Load Report Definition.
// From File.
ReportViewer1.LocalReport.ReportPath = "C:\\Report.rdlc";
//Load Report Data.
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", data));
//Refresh Control.
ReportViewer1.LocalReport.Refresh();
//创建连接。
实体db=新实体();
//使用提供的查询获取数据(其中Entities.SomeObject是要检索数据的实体)。
IQueryable data=db.CreateQuery(“将Entities.SomeObject中的值c选择为c,其中c.SomeValue>0”);
//重置控制。如果出于某种原因跳过此操作,则通常不起作用。
ReportViewer1.Reset();
//加载报告定义。
//从档案中。
ReportViewer1.LocalReport.ReportPath=“C:\\Report.rdlc”;
//加载报告数据。
ReportViewer1.LocalReport.DataSources.Add(newreportdatasource(“DataSet1”,data));
//刷新控件。
ReportViewer1.LocalReport.Refresh();

同样的方法也适用于DataTable。

您可以尝试编程方法

//Load Report Definition.
// From File.
ReportViewer1.LocalReport.ReportPath = "C:\\Report.rdlc";
//Load Report Data.
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", data));
//Refresh Control.
ReportViewer1.LocalReport.Refresh();
如果有一个包含数据的DataTable,只需将其作为数据源添加到ReportViewer即可。“DataSet1”是当前加载到报表查看器的报表中的数据集的名称

所以,如果您使用的是实体框架,它将是这样的

//Create Connection.
Entities db = new Entities();

//Get the Data Using the query supplied (Where Entities.SomeObject is the Entity to retrieve data).
IQueryable<Object> data = db.CreateQuery<Object>("SELECT VALUE c FROM Entities.SomeObject AS c WHERE c.SomeValue> 0");

//Reset Control. Doesn't Usually work if this is skipped for some reason.
ReportViewer1.Reset();
//Load Report Definition.
// From File.
ReportViewer1.LocalReport.ReportPath = "C:\\Report.rdlc";
//Load Report Data.
ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DataSet1", data));
//Refresh Control.
ReportViewer1.LocalReport.Refresh();
//创建连接。
实体db=新实体();
//使用提供的查询获取数据(其中Entities.SomeObject是要检索数据的实体)。
IQueryable data=db.CreateQuery(“将Entities.SomeObject中的值c选择为c,其中c.SomeValue>0”);
//重置控制。如果出于某种原因跳过此操作,则通常不起作用。
ReportViewer1.Reset();
//加载报告定义。
//从档案中。
ReportViewer1.LocalReport.ReportPath=“C:\\Report.rdlc”;
//加载报告数据。
ReportViewer1.LocalReport.DataSources.Add(newreportdatasource(“DataSet1”,data));
//刷新控件。
ReportViewer1.LocalReport.Refresh();

同样的方法也适用于DataTable。

为了让报表查看器访问我的DataTable,我最后做的是向我的项目中添加一个数据集。在该数据集中,我必须创建一个与代码生成的数据表中的列名相同的数据表。从那里,我转到我的报告,添加了一个表,并将其指向在数据集中创建的datatable。然后在我的代码中,我使用Shelby的上述代码以编程方式添加了datatable。

为了让报表查看器访问我的datatable,我最终做的是向我的项目中添加一个数据集。在该数据集中,我必须创建一个与代码生成的数据表中的列名相同的数据表。从那里,我转到我的报告,添加了一个表,并将其指向在数据集中创建的datatable。然后,在我的代码中,我使用Shelby的上述代码以编程方式添加了datatable。

好的,我知道您通过编程方式设置数据源做了什么,但是您在将报表路径设置到C驱动器中的某个位置时做了什么?这就是我的报表文件(.rdlc)所在的位置因此您可以执行以下操作:
ReportViewer1.LocalReport.ReportPath=Server.MapPath(“~/Reports/Report1.rdlc”)
直接加载项目中报表文件夹中的报表。为了简单起见,我将其设置为这种方式,因为我有多个项目,并且我使用相同的报告来测试所有项目,所以我不需要有多个副本,而是将它们保存到C驱动器。因此,我不仅需要编程设置数据源,还必须在文件夹中创建一个报告,并将ReportViewer1指向它。我的报告可以是空白的吗?它是否知道如何处理数据源?或者我还必须通过编程在报表中创建一些类似gridview的容器,并将其指向数据源。ReportViewer只是一个显示报表的控件。报告是显示数据的结构(保存为.rdlc文件),数据源是提供给报告的数据。因此,ReportViewer使用报表定义(.rdlc)提供的结构显示数据源的数据。好的,我知道你通过编程设置数据源做了什么,但是你在C驱动器中将报告路径设置到某个位置时做了什么?那就是我的报告文件所在的位置(.rdlc),这样你就可以执行
ReportViewer1.LocalReport.ReportPath=Server.MapPath(“~/Reports/Report1.rdlc”)
直接加载项目中报表文件夹中的报表。为了简单起见,我将其设置为这种方式,因为我有多个项目,并且我使用相同的报告来测试所有项目,所以我不需要有多个副本,而是将它们保存到C驱动器。因此,我不仅需要编程设置数据源,还必须在文件夹中创建一个报告,并将ReportViewer1指向它。我的报告可以是空白的吗?它是否知道如何处理数据源?或者我还必须通过编程创建一些容器,比如网格