J'essaie d'afficher un enregistrement dans un rapport. Les données sont dans le jeu de données. mais ce n'est pas binind pour eux. Lorsque les formulaires sont chargés, il affiche la mise en page du rapport. Mais quand je clique sur le bouton, cela montre les erreurs ..__ ci-dessous est mon 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;
}
}
}
Dans mon ensemble de données, j'ai 3 tables. Je sélectionne la source de liaison en haut de la fenêtre Reportviewer où une petite flèche indique.
Je me suis heurté à ce problème lors de l'utilisation de la version 10 de ReportViewer lors de l'utilisation de Visual Studio.Net 2012 pour modifier le code.
J'ai trouvé une solution en prenant le nom de la source de données dans le message d'erreur (dans le cas ci-dessus, il s'agit de "Product_Detail"). Je suis ensuite passé en vue du code source, j'ai trouvé le ReportViewer, ses sources de données, puis à l'intérieur de son ReportDataSource.
J'ai défini la propriété Name de ReportDataSource sur la même source que la source de données mentionnée dans le message d'erreur (par exemple, "Product_Detail").
J'espère que cela fonctionne pour vous comme il l'a fait pour moi.
En outre, si vous avez la latitude d'utiliser une version ultérieure du contrôle ReportViewer, vous constaterez peut-être que ce problème ne s'affiche pas ou qu'il est plus facile à résoudre.
"ProductsDataSet" est le nom de la source de données que vous lui attribuez . Votre erreur indique "Aucune instance de source de données n'a été fournie pour la source de données" Product_Detail "dans le service de génération de rapports Microsoft"
Je suppose que vous lui attribuez un mauvais nom.
Essayer,
ReportDataSource rds = new ReportDataSource("Product_Detail", ds.Tables[0]);
Si vous avez une source de données dans le rapport appelée "ProductsDataSet", vous en avez probablement 2, dans lesquelles vous souhaitez supprimer celle que vous n'utilisez pas ou lui affecter également une source de données.
Je me suis heurté à cela dans VS2013 dans mon application c #. Ainsi, si d'autres personnes arrivent ici .. Si vous avez ajouté le jeu de données dans le concepteur de rapport ... Accédez à votre formulaire, dans le concepteur, cliquez sur la flèche d'action du contrôle reportviewer. Sélectionnez Rebind Data Sources.
Il y avait deux ensembles de données créés dans mon fichier rdlc par défaut (je ne connais pas la raison). Fichier RDLC ouvert via le bloc-notes et suppression de la source de données inutile. Les valeurs ont été affectées deux fois à deux jeux de données différents . Nous espérons que cela vous aidera.
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()
si vous ajoutez une autre table au formulaire xsd après avoir ajouté le rapport à l'afficheur de rapports, vous risquez d'obtenir cette erreur.
maintenant, allez à l'événement Load du formulaire (qui inclut la visionneuse de rapport et ajoutez le remplissage pour le nouvel ensemble de données.
private void rptForm_Load(object sender, EventArgs e) {
this.vwrpt_TableAdapter1.Fill(this.DataSet1.vwDataset);
}
Importe Microsoft.Reporting.WebForms Partial Class Rpt_reports Hérite de System.Web.UI.Page Protected Sub Page_Load (expéditeur en tant qu'objet, e en tant que EventArgs) gère Me.Load Si pas IsPostBack Alors 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
Classe de fin