问题
I`m trying to display record in a Report. Data is in the Dataset. but it is not binind to them. When forms load it shows it report layout. But when i click on the button it show errors. below is my code.
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;
}
}
}
In my data set i have 3 tables. I select the bind source on the top of the reportviewer where a little arrow shows.
回答1:
I bumped into this problem while using version 10 of the ReportViewer while using Visual Studio.Net 2012 to edit code.
I found a solution by taking the name of the Data Source in the error message (in the case above, it's "Product_Detail"). I then went into source code view, found the ReportViewer, its DataSources, and then inside its ReportDataSource.
I set the Name property of the ReportDataSource to the same as the Data Source mentioned in the error message (ie "Product_Detail").
I hope this works for you as it did for me.
Also, if you have the latitude to use a later version of the ReportViewer control, you may find that this problem either doesn't appear or is easier to solve.
回答2:
"ProductsDataSet" is the name of the DataSource you are giving it. Your Error is saying "A data source instance has not been supplied for the data source“Product_Detail” in Microsoft reporting service"
I'm assuming you're assigning it the wrong name.
Try,
ReportDataSource rds = new ReportDataSource("Product_Detail", ds.Tables[0]);
If you do have a datasource in the report called "ProductsDataSet" then you probably have 2, in which you'd wanna delete the one you aren't using or assign it a datasource as well.
回答3:
I ran into this in VS2013 in my c# app.. so in case others get here..If you added the dataset in the report designer.. Go to your form, in the designer, click the action arrow on the reportviewer control. Select Rebind Data Sources.
回答4:
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()
回答5:
if you add another table to the xsd form after adding the report to the report viewer you might get this error.
- delete to report viewer and add it again
- set the report to the report viewer
now go to the Load event of the form (that includes the report viewer and add the Fill for new dataset.
private void rptForm_Load(object sender, EventArgs e) { this.vwrpt_TableAdapter1.Fill(this.DataSet1.vwDataset); }
回答6:
There was two dataSet created in my rdlc file by default(don't know the reason). Opened RDLC file through notepad and deleted the datasource which was not needed. The values were getting assigned two times to two different dataset. Hope this may help you.
回答7:
I know this post bit old but I would like to share my solution with you guys so it might help some.
In my project I got the same error which is "a data source instance has not been supplied for the datasource 'dataset1'". And I used entity framework with code-first method in my project.
In order to solve above error I follow below steps.
- Select action arrow on report designer (Report viewer).
- And select the RDLC report from choose report dropdown list.
- Select "Choose Data Source"Choose Data Source
- Then select the data source you wantSelect datasource / binding source from the drop down in highlighted area
回答8:
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
回答9:
I just had this issue with VS 16.4.6 and the latest report designer extension 15.3.1.
For me it was caused by giving the data set a slightly different name to the set I'd chosen from the drop down. It took me ages to figure out what was wrong. A hunch suggested it might be an issue. So I renamed the data set to match the source data entity and the error went away.
But why offer the user the chance to call the data set something else and then not test that this actually works?
The report viewer extension is still really poor quality.
回答10:
With respecting to the existing answers, I came across this issue today in VS2015 Professional and fixed it by navigating to Form1.cs (Design), using the action arrow selected the correct datasource and rebind in the end. Please see the image below and follow red, green and purple indications accordingly to see my solution steps.
来源:https://stackoverflow.com/questions/13332611/a-data-source-instance-has-not-been-supplied-for-the-data-sourceproduct-detail