21

我正在尝试在报告中显示记录。数据在数据集中。但它与他们无关。当表单加载时,它会显示报告布局。但是当我单击按钮时,它会显示错误。下面是我的代码。

using Microsoft.Reporting.WinForms;
//------------------------------------------------------------------
// <copyright company="Microsoft">
//     Copyright (c) Microsoft.  All rights reserved.
// </copyright>
//------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace ReportsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            this.reportViewer1.RefreshReport();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            System.Data.DataSet ds = GetDataSet();
            //reportViewer1.LocalReport.ReportPath = "Report1.rdlc";
            ReportDataSource rds = new ReportDataSource("ProductsDataSet", ds.Tables[0]);
            this.reportViewer1.LocalReport.DataSources.Clear();
            this.reportViewer1.LocalReport.DataSources.Add(rds);
            this.bindingSource1.DataSource = rds;
            this.reportViewer1.RefreshReport();
        }

        private System.Data.DataSet GetDataSet()
        {
            System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection("Data Source=DELL;Initial Catalog=Products;Integrated Security=True");
            sqlConn.Open();
            string sql= string.Format ( @"select o.[User], o.OrderDate, o.Quantity, o.OrderDetail, c.ShopName, c.[Address], c.City, c.Ph, p.* from dbo.Clients c,dbo.Product_Service o,Product_D p,Junction j where o.ClientId = c.ClientId
                            and o.ProductId  = j.ProductId 
                                and j.PCode = p.PCode
                                  and o.ClientId = 41
                                        and o.OrderDate='11/9/2012';");

            System.Data.SqlClient.SqlDataAdapter ad = new System.Data.SqlClient.SqlDataAdapter(sql, sqlConn);
            System.Data.DataSet ds = new System.Data.DataSet();
            ad.Fill(ds);
            sqlConn.Close();
            return ds;
        }
    }
}

在我的数据集中,我有 3 个表。我选择了报告查看器顶部的绑定源,其中显示了一个小箭头。

4

10 回答 10

32

在使用 Visual Studio.Net 2012 编辑代码时,我在使用 ReportViewer 版本 10 时遇到了这个问题。

我通过在错误消息中获取数据源的名称找到了解决方案(在上述情况下,它是“Product_Detail”)。然后我进入源代码视图,找到了 ReportViewer,它的 DataSources,然后是它的 ReportDataSource。

我将 ReportDataSource 的 Name 属性设置为与错误消息中提到的 Data Source 相同(即“Product_Detail”)。

我希望这对你有用,就像对我一样。

此外,如果您可以使用更高版本的 ReportViewer 控件,您可能会发现此问题要么不会出现,要么更容易解决。

于 2013-08-29T22:43:57.933 回答
12

“ProductsDataSet”是您提供给它的数据源的名称。您的错误是“尚未为 Microsoft 报告服务中的数据源“Product_Detail”提供数据源实例”

我假设你给它分配了错误的名字。

尝试,

ReportDataSource rds = new ReportDataSource("Product_Detail", ds.Tables[0]);

如果您在报告中确实有一个名为“ProductsDataSet”的数据源,那么您可能有 2 个,您想在其中删除您不使用的那个,或者也为其分配一个数据源。

于 2012-11-12T16:18:37.063 回答
9

我在我的 c# 应用程序中的 VS2013 中遇到了这个问题。所以万一其他人来到这里。如果您在报表设计器中添加了数据集。转到您的表单,在设计器中,单击报表查看器控件上的操作箭头。选择重新绑定数据源。

于 2015-03-03T04:51:26.790 回答
2

关于现有的答案,我今天在 VS2015 Professional 中遇到了这个问题,并通过导航到 Form1.cs(设计)来修复它,使用动作箭头选择正确的数据源并最终重新绑定。请查看下图并相应地按照红色、绿色和紫色指示查看我的解决方案步骤。

在此处输入图像描述

于 2020-05-11T16:41:20.917 回答
0
    Dim rptDataSource As ReportDataSource
    Try
        With Me.ReportViewer1.LocalReport
            ReportViewer1.LocalReport.ReportPath = Application.StartupPath & "\RTFLS\Report1.rdlc"
            '.DataSources.Clear()
        End With
        Dim ds As New POAS.CustomersTotalPayment 
        Dim da As New POAS.CustomersTotalPaymentTableAdapters.PAYMENTSTATUSTableAdapter

        da.Fill(ds.PAYMENTSTATUS)

        rptDataSource = New ReportDataSource("CustomersTotalPayment", ds.Tables("PAYMENTSTATUS"))
        Me.ReportViewer1.LocalReport.DataSources.Add(rptDataSource)

        Me.ReportViewer1.SetDisplayMode(Microsoft.Reporting.WinForms.DisplayMode.PrintLayout)
    Catch ex As Exception
        MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try


    Me.ReportViewer1.RefreshReport()
于 2013-06-03T13:41:33.963 回答
0

如果在将报表添加到报表查看器后将另一个表添加到 xsd 表单,您可能会收到此错误。

  1. 删除到报表查看器并再次添加
  2. 将报表设置为报表查看器
  3. 现在转到表单的加载事件(包括报表查看器并添加新数据集的填充。

    private void rptForm_Load(object sender, EventArgs e) {
      this.vwrpt_TableAdapter1.Fill(this.DataSet1.vwDataset);
    }
    
于 2014-02-28T05:32:34.340 回答
0

默认情况下,我的 rdlc 文件中创建了两个数据集(不知道原因)。通过记事本打开 RDLC 文件并删除不需要的数据源。这些值被两次分配给两个不同的数据集。希望这可以帮助你。

于 2019-01-07T08:32:09.413 回答
0
Imports Microsoft.Reporting.WebForms

Partial Class Rpt_reports
Inherits System.Web.UI.Page

  Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        Dim ds As New Custamer
        'da.Fill(ds.Tables("custamer")
        Dim path As String = Server.MapPath("customerinfo.rdlc")

        ReportViewer1.LocalReport.DataSources.Clear()
        ReportViewer1.LocalReport.ReportPath = path
        ReportViewer1.LocalReport.DataSources.Add(New Microsoft.Reporting.WebForms.ReportDataSource("Rpt_reports", ds.Tables("Custamer")))
        ReportViewer1.LocalReport.Refresh()
    End If
  End Sub

  'Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

  'End Sub

End Class
于 2019-02-22T05:48:32.733 回答
0

我知道这篇文章有点老了,但我想与你们分享我的解决方案,这样它可能会有所帮助。

在我的项目中,我遇到了同样的错误,即“没有为数据源'dataset1'提供数据源实例”。我在我的项目中使用了带有代码优先方法的实体框架。

为了解决上述错误,我遵循以下步骤。

  1. 选择报表设计器(报表查看器)上的操作箭头。
  2. 并从选择报告下拉列表中选择 RDLC 报告。
  3. 选择“选择数据源选择数据源
  4. 然后选择你想要的数据源 从突出显示区域的下拉列表中选择数据源/绑定源
于 2019-04-20T05:38:35.563 回答
0

我刚刚在 VS 16.4.6 和最新的报表设计器扩展 15.3.1 中遇到了这个问题。

对我来说,这是因为数据集的名称与我从下拉列表中选择的名称略有不同。我花了很长时间才弄清楚出了什么问题。一种预感表明这可能是一个问题。所以我重命名了数据集以匹配源数据实体并且错误消失了。

但是,为什么要让用户有机会调用其他数据集,然后不测试它是否真的有效呢?

报告查看器扩展的质量仍然很差。

于 2020-03-11T11:34:40.487 回答