2010-10-26 6 views
4

J'essaie actuellement d'envoyer dynamiquement un rapport rdl à mon objet ReportViewer .net.Une instance de source de données n'a pas été fournie pour la source de données

Je continue à obtenir l'erreur quand je le fais: Une instance de source de données n'a pas été fourni pour la source de données « bla »

Je suis en train de définir « bla » dans mon code derrière lors de l'exécution.

ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Local; 
    ReportViewer1.LocalReport.ReportPath = ReportFile; 
    ReportViewer1.LocalReport.DataSources.Clear(); 
    Microsoft.Reporting.WebForms.ReportDataSource rds = new Microsoft.Reporting.WebForms.ReportDataSource(); 
    rds.Name = "blah"; 
    ReportViewer1.LocalReport.DataSources.Add(rds); 
    ReportViewer1.DocumentMapCollapsed = true; 
    ReportViewer1.LocalReport.Refresh(); 

cela ne fonctionne pas par un long shot. Je ne suis pas sûr de ce que je suis censé faire. voici un extrait du haut de mon fichier RDL:

<DataSource Name="blah"> 
     <rd:DataSourceID>c6a8409e-71a4-4e96-86ad-b300a5b942c3</rd:DataSourceID> 
     <ConnectionProperties> 
     <DataProvider>SQL</DataProvider> 
     <ConnectString>Data Source=10.555.121.121;Initial Catalog=blah</ConnectString> 
     <IntegratedSecurity>true</IntegratedSecurity> 
     </ConnectionProperties> 
    </DataSource> 
    </DataSources> 

Tout ce que je suis en train de faire est de choisir simplement * à partir d'une table dans mon rapport « bla ». J'ai besoin de ceci pour fonctionner parce que j'ai beaucoup d'autres instances de rapport que je dois montrer dans mon ReportViewer. Pourquoi Microsoft ne facilite-t-il pas cela?

Merci à tout le monde avance ...

+0

Dont vous avez besoin ReportViewer1.DataBind() ;? – Raymund

+1

Merci pour votre suggestion, la solution n'a pas été facile, j'ai dû analyser le XML de la rdl et récupérer le sql et construire une source de données puis nommer la source de données le même nom que le rdl, après que tout a commencé à fonctionner . – Lyle

+2

Ce que vous faisiez semble intéressant. Peut-être que vous devriez élaborer sur ce que vous avez fait comme une réponse puis l'accepter? – Mzn

Répondre

0

Le contrôle ReportViewer est conçu pour fonctionner en mode local avec RDLC fichiers de rapport, pas des fichiers de rapport RDL. Le contrôle ReportViewer est uniquement destiné à rendre le rapport et, par conséquent, ignore tout jeu de données et les informations de connexion qui peuvent être présentes (c'est-à-dire si vous utilisez un fichier RDL au lieu d'un fichier RDLC). L'intention est que vous créiez des connexions, interrogiez des sources de données, que vous placiez les résultats dans DataTables et que vous les ajoutiez pour créer le (s) reportDataSource (s) pour le contrôle reportViewer dans l'application appelante.

De MSDN:

En mode de traitement local, le contrôle ouvre une définition de rapport, traite et rend ensuite le rapport dans la zone d'affichage. En mode de traitement local , vous pouvez obtenir la définition de rapport à partir d'un fichier .rdlc sur le système de fichiers, d'un flux ou d'une ressource intégrée dans votre application.

Plus d'informations: Adding and Configuring the ReportViewer Controls

Voir aussi: When to use RDLC over RDL reports?

Questions connexes